如何用fzf将技术写作模板文件读入Neovim缓冲区?
用fzf直接将模板内容读入Neovim缓冲区的解决方案
嘿,完全懂你这种在几百个模板里找文件还要复制粘贴的麻烦!其实不用绕路,用fzf.vim(或者fzf-lua)就能直接实现选中文件后把内容读入当前缓冲区,还带模糊搜索和预览,效率高多了。下面给你几个实用的实现方式:
方法一:自定义Vim命令(Vimscript配置)
在你的init.vim里添加这段配置,创建一个专门的命令来插入模板:
-- 替换成你的模板目录路径 let g:template_dir = '/path/to/your/tech-writing-templates' command! -nargs=0 InsertTemplate call fzf#vim#files(g:template_dir, { \ 'sink': function('s:insert_template'), \ 'options': '--preview "cat {}" --height 50%' \ }) function! s:insert_template(file) -- 把选中的文件内容读入当前光标下方 execute 'read' a:file endfunction
配置好后,在Neovim里输入:InsertTemplate就能打开fzf搜索模板目录,选中文件后内容会直接插入到当前缓冲区的光标位置,还能通过预览窗口提前看模板内容。
你还可以绑定个快捷键,比如:
nnoremap <leader>it :InsertTemplate<CR>
以后按<leader>it就能快速唤起搜索,不用敲命令。
方法二:临时命令(无需配置)
如果不想改配置,也可以直接在Neovim命令行里执行这条命令,指定你的模板目录:
:execute 'read' \=system('cd /path/to/your/templates && fzf --preview "cat {}" < /dev/tty')
这条命令会调用系统的fzf工具选择文件,然后把选中的文件路径传给:read命令,直接插入内容。
方法三:Lua配置(适合Neovim现代配置)
如果你用Lua写Neovim配置,这里有个基于fzf-lua的实现(如果用原生fzf.vim也可以类似调整):
local template_dir = "/path/to/your/tech-writing-templates" vim.api.nvim_create_user_command('InsertTemplate', function() local fzf = require('fzf-lua') fzf.files({ cwd = template_dir, previewer = fzf.previewers.cat, actions = { ['default'] = function(selected) -- 将选中文件的内容读入当前缓冲区 vim.cmd('read ' .. selected[1]) end } }) end, { desc = "Insert tech writing template via fzf" }) -- 绑定快捷键 vim.keymap.set('n', '<leader>it', '<cmd>InsertTemplate<CR>', { desc = "Insert template" })
这个方式更符合Neovim现在的Lua生态,功能和Vimscript版本一致,还能利用fzf-lua的更多预览和自定义选项。
这些方法都能帮你省去复制粘贴的步骤,直接通过fzf的模糊搜索定位模板,一键插入内容,比之前的流程高效太多啦!
内容的提问来源于stack exchange,提问作者Ricardo Pietrobon
相关产品推荐
相关产品推荐

