如何在Vim中批量执行历史命令?
批量执行Vim命令历史中的多条命令
在q:窗口里直接选多行按回车确实没用,因为默认的回车绑定只处理单行。下面是两种能满足你需求的方法,执行时命令会在原窗口运行,和单条执行的行为一致:
方法一:手动执行批量命令
- 在
q:窗口用可视模式(v或V)选中你要执行的多行命令 - 输入
:execute join(getline("'<", "'>"), "\n")然后按回车
这个命令的原理是:getline("'<", "'>")获取你选中的所有行内容,join(..., "\n")把这些行用换行符拼接成一个字符串,最后execute执行这个完整的命令串,每条命令会按顺序在原窗口运行。
方法二:自定义映射简化操作
如果你需要经常批量执行,可以在q:窗口里设置一个临时映射,让选中多行后按回车直接执行:
- 打开
q:窗口后,输入:vnoremap <buffer> <CR> :execute join(getline("'<", "'>"), "\n")<CR> - 之后在这个窗口里用可视模式选中多行,按回车就会批量执行
<buffer>表示这个映射只在当前的q:窗口生效,不会影响其他窗口的按键绑定。如果想永久生效,可以把这条映射加到你的~/.vimrc(或~/.config/nvim/init.vim)里,不过要限定在命令历史窗口:
augroup CmdHistoryMaps autocmd! autocmd BufEnter qf if &ft ==# 'vimcmdline' | vnoremap <buffer> <CR> :execute join(getline("'<", "'>"), "\n")<CR> | endif augroup END
这样每次打开q:窗口,这个映射都会自动生效。
内容的提问来源于stack exchange,提问作者jabellcu
相关产品推荐
相关产品推荐

