vim中有没有办法给出编辑器命令列表?我想执行一系列“全局”命令,命令有一些模式。所以我最好生成命令列表(使用正则表达式搜索和替换),然后运行它们,而不必输入每个命令。
谢谢! 拉夫
答案 0 :(得分:8)
(更新:s / buffer / register / g)
如果您可以将要运行的所有命令放入寄存器,那么执行寄存器?
http://www.bo.infn.it/alice/alice-doc/mll-doc/linux/vi-ex/node24.html
例如,如果您有一个类似的文件:
abc
def
ghi
dd
dd
然后做
:g/dd/y A
这会用dd猛拉所有行并附加到注册表
然后,如果您在文件的第一行,并键入:
@a
然后将删除2行,文件应如下所示:
ghi
dd
dd
答案 1 :(得分:1)
对我来说听起来像一个宏。谷歌vim宏提供了大量有用的信息。基本上
宏中有很多功能。有时您希望在会话之间保存宏。当我想这样做时,您可以通过粘贴刚刚保存的寄存器将宏粘贴到缓冲区中。例如,如果你保存宏来注册w,输入“wp to paste register w(注意这是双引号,而不是两个单引号)。当你按下escape或enter时,你会看到一些有趣的字符。还有更多写这些的可读方式和,但是^ [和^ M也会起作用。
你现在可以将这些行放入一个寄存器(我看到有人刚刚发布了一个答案,但与我的方式有所不同)通过在可视模式下选择文本,然后输入“wy。这会拉动所选文本到寄存器w。现在将寄存器作为宏运行,按以前键入@w。
如果您经常使用它,则可能值得将宏映射到.vimrc中的快捷命令。例如,这里有一些我在vimrc中的地图,可以帮助我轻松打开并保存我的.vimrc
" For modifying the .vimrc
nmap ,e :e $HOME/.vimrc<cr>
nmap ,s :write!<cr>:source $HOME/.vimrc<cr>
现在当我正在编辑任何文件并发现一个新的宏我要保存我输入时,e打开我的.vimrc。我将宏粘贴进去,添加一个map语句(根据你所处的模式有不同的地图,如果你感兴趣的话还有大量的文档可以解释这个),并保存.vimrc,也可以保存.vimrc。这样我的新映射命令在其他文件中可用而无需重新启动vim。
答案 2 :(得分:0)
以下是以交互方式运行vim命令的映射:
" run selected vimscript
vmap <Leader>r "vy:@v<CR>
" run vimscript line
nmap <Leader>r "vyy:@v<CR>
检查vim帮助:
:h :@
所以在你的情况下(愚蠢的例子):
:g/line/
:g/for/
:g/endfor/
for line in getline(1, 3)
let @a = line
@a
endfor
将其另存为.vim和:so%
答案 3 :(得分:0)
“命令”这个词在这里有点含糊不清。您还可以使用执行已经被拉入寄存器的Ex命令 :@” 例如,对于默认寄存器。这在你编写vimscript代码时特别有用,例如在.vimrc文件中,你想测试函数或映射以确保它们正常工作。
所以如果你有一个包含
的缓冲区tabedit http://stackoverflow.com/questions/1830886/vim-executing-a-list-of-editor-commands
%s/intuited/The King Of Everything/g
w /tmp/superduperawesome.html
!/usr/bin/sensible-browser /tmp/superduperawesome.html
您可以使用正常模式操作
ggyVG:@"
显示此页面略有不同的版本。
也可以使用
执行存储在寄存器或变量中的代码:execute @"
但似乎有一些奇怪的问题:它会在命中评论或结束时停止执行。我没有遇到过这些问题:@“。