Vim 如何在光标下包含单词的所有行前添加(或追加)一些文本?
例如,我有以下几行:Vim 如何在光标下包含单词的所有行前添加(或追加)一些文本?,vim,Vim,例如,我有以下几行: I live in Paris You live in Montreal and New-York She lives in Bangor He lives in Paris and in New-York 我想在包含某些图案(如巴黎)的所有行前面加上一些文字,例如“->”,以便: -> I live in Paris You live in Montreal and New-York She lives in Bangor -> He lives in P
I live in Paris
You live in Montreal and New-York
She lives in Bangor
He lives in Paris and in New-York
我想在包含某些图案(如巴黎)的所有行前面加上一些文字,例如“->”,以便:
-> I live in Paris
You live in Montreal and New-York
She lives in Bangor
-> He lives in Paris and in New-York
我知道如何使用g命令执行此操作:
:g/Paris/s/^/->
但我只想把光标放在巴黎,得到同样的结果
我想我必须在我的.vimrc中创建一个映射,例如:
:nnoremap <leader>s :g/<cword>/s/^/->
:nnoremap s:g//s/^/->
当然,这是行不通的。我应该如何继续?这是一个简单的问题:
:g;Paris;s;^;-> ;g
其中:
:g - global search
Paris - only for lines that have pattern Paris
s - substiture
; - field separator
^ - match beginning of line.
-> - replacement pattern
g - all occurrences
您可以使用以下映射
nnoremap <leader>s :let @/=expand('<cword>') <bar> g//s/^/-> /<CR>
对于这样的东西,我使用宏。光标位于第一个“巴黎”上的“P”:
ywqq^i->[ESC]nnq
翻译:
将单词拉入搜索寄存器yw
开始录制名为“q”的宏qq
转到行的开头^
插入i
- “->”要插入的文本
返回命令模式[ESC]
向前跳两个“巴黎”nn
停止录制q
@q
,直到您标记了巴黎的所有实例
一旦我养成了使用宏的习惯,我的整个世界都变了。它们非常有用
同样,这样一来,你就不必用重映射把vimrc弄得乱七八糟,当你决定将“->”更改为其他内容时,你也不必编辑vimrc。我也使用宏,但在这种情况下,我更喜欢@FDinoff的解决方案,它允许我一次完成这项工作。无论如何,谢谢你的回答。你也可以用
插入当前单词。@PeterRincker Nice不知道这个词。
nnoremap <leader>s :g/<c-r><c-w>/s/^/-> /<CR>