如何将Vim参数列表的第二个文件加入缓冲区列表并设为交替文件?
解决Vim/Neovim启动时自动加载参数列表文件到缓冲区并设置交替文件
方法一:使用VimScript配置
在~/.vimrc(Vim)或~/.config/nvim/init.vim(Neovim)中添加以下内容:
" 启动完成后自动加载参数列表所有文件到缓冲区 autocmd VimEnter * silent! argdo edit " 若参数列表有至少2个有效文件,将第二个设为交替文件 autocmd VimEnter * if len(filter(argv(), 'filereadable(v:val)')) >= 2 | let b:alternate = filter(argv(), 'filereadable(v:val)')[1] | endif
autocmd VimEnter *指定在Vim完全启动后执行命令silent! argdo edit遍历参数列表的每个文件,用:edit加载到缓冲区,silent!避免文件不存在等报错- 第二行过滤出可读取的文件,数量达标时直接设置交替文件,确保
<C-6>和:vsplit#能直接生效
方法二:Neovim用户使用Lua配置
在~/.config/nvim/init.lua中添加:
vim.api.nvim_create_autocmd("VimEnter", { callback = function() -- 加载参数列表所有文件到缓冲区 vim.cmd("silent! argdo edit") -- 过滤掉nvim启动参数,只保留有效文件路径 local valid_files = {} for _, arg in ipairs(vim.v.argv) do if vim.fn.filereadable(arg) == 1 or vim.fn.isdirectory(arg) == 1 then table.insert(valid_files, arg) end end -- 有至少2个文件时,设置第二个为交替文件 if #valid_files >= 2 then vim.b.alternate = valid_files[2] end end })
额外技巧:启动自动分屏
如果希望启动时直接分屏显示所有参数文件,可添加以下配置(以垂直分屏为例):
" VimScript版本 autocmd VimEnter * if argc() > 1 | argdo vsplit | wincmd h | endif
-- Lua版本 vim.api.nvim_create_autocmd("VimEnter", { callback = function() if vim.fn.argc() > 1 then vim.cmd("argdo vsplit") vim.cmd("wincmd h") -- 切回第一个窗口 end end })
内容的提问来源于stack exchange,提问作者farnsy
相关产品推荐
相关产品推荐

