我使用此键映射来复制一行,并转到这个新创建的行上的相同光标位置:
nnoremap , mqYp`qj
这是做什么的:
这很好用,但是当我在命令前放一个数字时,我看到了一个缺陷。想象一下,我想复制这一行10次。它会尝试基本上创造10个标记。我可以做Y10p
,我明白这一点。我对这种方法的问题在于,我在第一行中的光标位置不同,我正在复制。
所以我正在寻找基本上10,
的方法,使用我之前制作的映射,并在最后一行结束,在第一行的同一光标位置。请注意,我只使用 IdeaVIM 代码,这意味着我无法为此创建任何功能。
是否有可能让10,
在这种情况下工作?
示例文字
# 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`
我在LetHandler.java
here看到了一些潜力,但我似乎无法弄清楚如何使用它来匹配用例。另一方面,here它表示根本不支持它。
答案 0 :(得分:2)
当我玩vimgolf时,我有时会使用技巧[count]@='...
。它可以用于您的要求。
你可以映射:
nnoremap , @='mqYp`q'<cr>
然后你可以简单地按200,
来实现你想要的效果。
答案 1 :(得分:1)
你可以通过粘贴到当前行的上面来实现这一点。这样做nnoremap , YmqP`q
你不能这样做,因为vim的键映射只是字符串连接。实现此目的的一种方法是预定义宏。把它放在相关的rc文件中,
let @q="mqYP`q"
nnoremap , @q