0

例如,我有以下几行:

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

我知道如何使用 ag 命令来做到这一点:

:g/Paris/s/^/->  

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

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

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

当然,这是行不通的。我应该如何进行?

4

3 回答 3

3

您可以使用以下映射。

nnoremap <leader>s :let @/=expand('<cword>') <bar> g//s/^/-> /<CR>

它将搜索寄存器设置为调用全局命令的光标下的单词。如果您不指定模式,则将使用最后一个搜索模式,在这种情况下将使用光标下的单词。


如果您要手动执行此操作,另一种方法是点击*将搜索寄存器设置为光标下的单词。然后在不指定模式的情况下执行全局命令。


来自@PeterRincker:您还可以<c-r><c-w>在命令行模式下使用插入当前单词。这减少了映射到

nnoremap <leader>s :g/<c-r><c-w>/s/^/-> /<CR>
于 2013-07-26T17:45:20.380 回答
0

对于这样的东西,我使用宏。将光标放在第一个“Paris”上的“P”上:

ywqq^i-> [ESC]nnq

翻译:

  • yw将单词拉入搜索寄存器
  • qq开始录制名为“q”的宏
  • ^ 转到行首
  • i 插入
  • '-> ' 要插入的文本
  • [ESC]返回命令模式
  • nn 向前跳两个“巴黎”
  • q停止录制

现在您位于第二个“巴黎”。按住 shift 键并@q反复点击,直到您标记了所有 Paris 实例。

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

此外,这样,您不必将 vimrc 与重映射弄乱,并且当您决定将“->”更改为其他内容时,您不必编辑您的 vimrc。

于 2013-07-26T19:48:35.047 回答
-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
于 2013-07-26T17:43:59.340 回答