假设我有一个包含以下文本的文件:
aaa
bbb
ccc
bbb
ccc
eee
我需要在ccc
的 * 第二次 * 出现之后添加一个缺失行ddd
。
由于这个原因,使用内置的search()
函数,如建议的here,将不起作用,因为它将查找第一个出现的位置。
我有一个vimscript函数的开始:
function! addLine()
normal /bbb
normal /bbb
" MISSING LINE
wq!
endfunction
是否可以只使用正常模式等?如果是,如何进行?
3条答案
按热度按时间bqjvbblv1#
对于
:normal
,任何按下回车(回车,<CR>
)或正常模式命令所需的转义都需要传递给它。所以/...
命令看起来像这样:你需要回车,没有它
/
命令会被取消。所以你的函数看起来像这样:
(按
n
重复搜索,然后按o
开始下一行的输入,然后按Escape退出插入模式。)或拆分为多个
:normal
:您必须小心,此处插入的文本没有可能是特殊的字符串。
anhgbhbe2#
除了Muru的优秀和有用的回答,我想提供实际的代码:
请注意:
\<cr>
在文件中显示为^M
,输入为CTRL-v,然后输入为CTRL-m。\<esc>
在文件中显示为^[
,输入为CTRL-v,然后输入ESC。要理解脚本
normal /bbb\<cr>n/ccc\<cr>oddd\<esc>
:/bbb\<cr>
-查找第一行bbb
n
-查找下一个匹配项/ccc\<cr>
-查找下一行ccc
o
-进入插入模式并输入文本:ddd
\<esc\>
退出插入模式。这可以使用Vim函数重写为:
这两个函数都可以根据需要正确地编辑文件,当然我也同意使用Vim函数更简洁。如果你能记住所有的功能!
另请参阅:
:help
e4eetjau3#
我也想这么做。却没有找到答案。但当我尝试了一些事情,我找到了一个解决方案。
我知道并希望你已经找到了答案,但这里的其他人是要做的事情:
当你在vimscript菜单中时,只需按 esc,然后按 +
此时,您可以添加新内容。为了确保它工作正常,你可以在屏幕底部的vimscript菜单中看到一个“插入模式”。希望能帮上忙。