使用2个按键多次重复Vim重复行

时间:2017-05-03 07:40:46

标签: ideavim

我使用此键映射来复制一行,并转到这个新创建的行上的相同光标位置:

nnoremap , mqYp`qj

这是做什么的:

  1. 创建标记'q'
  2. Yank line
  3. 粘贴/放置行(当前行下方,光标现在位于新行的开头)
  4. 返回前一行标记
  5. 向下移动一行。 (光标现在位于上一行开头的同一位置的新行)
  6. 这很好用,但是当我在命令前放一个数字时,我看到了一个缺陷。想象一下,我想复制这一行10次。它会尝试基本上创造10个标记。我可以做Y10p,我明白这一点。我对这种方法的问题在于,我在第一行中的光标位置不同,我正在复制。

    所以我正在寻找基本上10,的方法,使用我之前制作的映射,并在最后一行结束,在第一行的同一光标位置。请注意,我只使用 IdeaVIM 代码,这意味着我无法为此创建任何功能。

    是否有可能让10,在这种情况下工作?

    编辑#1:

    示例文字

    # Start
    # Initialize new variables
    new_invoice_name_one = 'New Name One'
    new_invoice_name_two = 'New Name Two'
    new_invoice_address_one  = 'New Address One'
    

    执行命令:3,,光标位于第2行的第一个

    所需的输出

    # Start
    # Initialize new variables
    # Initialize new variables
    # Initialize new variables
    # Initialize new variables
    
    new_invoice_name_one = 'New Name One'
    new_invoice_name_two = 'New Name Two'
    new_invoice_address_one  = 'New Address One'
    

    光标位于第5行的第一个I`

    编辑#2:

    我在LetHandler.java here看到了一些潜力,但我似乎无法弄清楚如何使用它来匹配用例。另一方面,here它表示根本不支持它。

2 个答案:

答案 0 :(得分:2)

当我玩vimgolf时,我有时会使用技巧[count]@='...。它可以用于您的要求。

你可以映射:

nnoremap , @='mqYp`q'<cr>

然后你可以简单地按200,来实现你想要的效果。

答案 1 :(得分:1)

你可以通过粘贴到当前行的上面来实现这一点。这样做nnoremap , YmqP`q

更新

你不能这样做,因为vim的键映射只是字符串连接。实现此目的的一种方法是预定义宏。把它放在相关的rc文件中,

let @q="mqYP`q"
nnoremap , @q