VIM:设置键映射以替换设置列的&符号(&)

时间:2018-01-31 21:26:35

标签: vim

我想设置一个键映射,这样当我输入这个键(特别是我的例子中的F7键)时,它会用符号(&)替换第6列中的任何字符。

我正在尝试

:nnoremap <F7> 6| R &<ESC>

然而,这似乎没有做到这一点,我似乎无法理解为什么。

为什么我的错误?

3 个答案:

答案 0 :(得分:2)

  

然而,这似乎没有做到这一点,我似乎无法理解为什么。

那么......它做什么而不是你期望的呢?

无论如何,您的映射存在许多问题:

  1. 您无法在映射中使用文字管道字符。您必须将其转义(\|)或使用<bar>代替,这样可以提供以下信息:

    nnoremap <F7> 6\| R &<Esc>
    nnoremap <F7> 6<Bar> R &<Esc>
    

    请参阅:help map-bar

  2. 在您的宏中,<Space>字符()被解释为<Space>命令,因此将光标向右移动一个字符。如果你不是<Space>(命令),请不要使用<Space>(角色):

    nnoremap <F7> 6\|R&<Esc>
    
  3. R会让您进入替换模式。这没用,因为你只是替换了一个角色,它会迫使你<Esc>进入普通模式。请改用r

    nnoremap <F7> 6\|r&
    

    请参阅:help R:help r

答案 1 :(得分:1)

或者,将光标移回其原始位置(即替换前的位置)也是有用的。要做到这一点,请使用:

nnoremap <F7> :let a=getpos(".")<cr>6\|r&:call cursor(a[1],a[2])<cr>

这张地图像这样分解:

  • :let a=getpos(".")<cr>将光标位置保存在变量a
  • 6\|r&在之前的回答中有解释
  • :call cursor(a[1],a[2])<cr>将光标返回到原始位置

答案 2 :(得分:0)

你走了:

:map <F7> 05lr&

没有逃脱。只需输入并输入即可。实际上是输入这些字符 - 小于符号,大写字母F,数字7等。