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
    将单词拉入搜索寄存器
  • qq
    开始录制名为“q”的宏
  • ^
    转到行的开头
  • i
    插入
  • “->”要插入的文本
  • [ESC]
    返回命令模式
  • nn
    向前跳两个“巴黎”
  • q
    停止录制
现在你的位置在第二个“巴黎”。按住shift键并反复点击
@q
,直到您标记了巴黎的所有实例

一旦我养成了使用宏的习惯,我的整个世界都变了。它们非常有用


同样,这样一来,你就不必用重映射把vimrc弄得乱七八糟,当你决定将“->”更改为其他内容时,你也不必编辑vimrc。

我也使用宏,但在这种情况下,我更喜欢@FDinoff的解决方案,它允许我一次完成这项工作。无论如何,谢谢你的回答。你也可以用
插入当前单词。@PeterRincker Nice不知道这个词。
nnoremap <leader>s :g/<c-r><c-w>/s/^/-> /<CR>