如何在光标下包含一些文本的所有行前置(或追加)?

时间:2013-07-26 17:33:35

标签: 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 Paris and in New-York

我知道如何使用g命令执行此操作:

:g/Paris/s/^/->  

但我想简单地将光标放在巴黎并获得相同的结果。

我想我必须在.vimrc中创建一个映射,例如:

:nnoremap <leader>s :g/<cword>/s/^/-> 

当然,这不起作用。我该怎么办?

3 个答案:

答案 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插入
  • ' - &GT; '要插入的文字
  • [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