我有例如以下几行:
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/^/->
当然,这不起作用。我该怎么办?
答案 0 :(得分:3)
您可以使用以下映射。
nnoremap <leader>s :let @/=expand('<cword>') <bar> g//s/^/-> /<CR>
它将搜索寄存器设置为光标下的单词,调用global命令。如果你没有指定模式,那么将使用最后一个搜索模式,在这种情况下,将使用光标下的单词。
如果你手动执行此操作,另一种方法是点击*
将搜索寄存器设置为光标下的单词。然后执行全局命令而不指定模式。
来自@PeterRincker:您还可以使用<c-r><c-w>
在命令行模式下插入当前单词。这减少了映射到
nnoremap <leader>s :g/<c-r><c-w>/s/^/-> /<CR>
答案 1 :(得分:0)
对于这样的东西,我使用宏。将光标放在第一个“巴黎”的“P”上:
ywqq^i-> [ESC]nnq
翻译:
yw
向搜索注册qq
开始录制名为'q'^
转到行首i
插入[ESC]
返回命令模式nn
跳过两个“巴黎”的q
停止录制现在你的位置是第二个“巴黎”。按住shift键并反复点击@q
,直到您标记了巴黎的所有实例。
一旦我开始养成使用宏的习惯,我的整个世界都发生了变化。它们非常有用。
另外,通过这种方式,您不必使用重映射使vimrc混乱,并且当您决定将“ - &gt;”更改为其他内容时,您不必编辑vimrc。
答案 2 :(得分:-1)
这很简单:
: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