如何在vim中定义键映射并多次使用重复次数?

时间:2018-06-07 10:28:47

标签: vim mapping

我使用相对行号编辑文件。通常我想复制一条线,从上面的16行到当前位置。

在正常模式下,我会输入:"wb+"

但是当它是第14行时,它是:16kyy16jP

如何定义键映射/命令,以便能够在正常模式下输入14kyy14jP16LK之类的内容,以达到相同的效果?

3 个答案:

答案 0 :(得分:5)

  

16kyy16jP

多么浪费......您可以使用:help :t代替:

:-16t.
:-14t.

答案 1 :(得分:3)

可能类似

nnoremap <silent> µ :<c-u>exe "normal! ".v:count1."kyy".v:count1."jP"<cr>

但是,老实说,我在这里使用功能,因为没有必要走动那么多:

nnoremap <silent> µ :<c-u>call append(line('.')-1, getline(line('.')-v:count1))<cr>

请注意,以下内容也适用于:yank

nnoremap <silent> µ :<c-u>exe '-'.v:count1.'y'<cr>P
编辑:我不知道:t,@ romainl的回答(使用@ Kent&#39;补丁)比我的更有意义。如果你想要一个映射,它可以是模式:

nnoremap <silent> µ :<c-u>exe '-'.v:count1.'t-1'<cr>
" which isn't much different than the previous answer.

答案 2 :(得分:1)

您可以映射函数调用,该函数调用接受输入参数。

function! YourMap(n) 
    exec 'normal! '.a:n.'-Y'.a:n.'+P'
endfunction
nnoremap <leader>c :call YourMap(input('lines:')) <CR>

<leader>c,然后输入相对行号,应完成复制/粘贴。

<leader>c是映射键,您可以将其更改为其他键组合。