VIM映射未完全重复

时间:2018-11-17 19:02:08

标签: vim macros keymapping

为了快速注释代码行,我在vimrc中添加了以下几行:

augroup cmnts
    autocmd FileType c, cpp, javascript nnoremap <buffer> <leader>c 
I//<esc>j
    autocmd FileType python nnoremap <buffer> <leader>c I#<esc>j
augroup END

我的期望是,当我用数字重复映射时,该行数将被注释,但它只会多次添加注释字符。

例如在Python中,当我键入Hc Hc Hc(H是我的领导键)时,它注释三行,但是当我键入3Hc时,我在当前行的开头得到###。

1 个答案:

答案 0 :(得分:2)

要计数,您将切换为使用:normal Ex 命令。对于ruby / python,这看起来像下面的样子:

nnoremap <leader>c :normal I# <CR>

此外, vim知道大多数语言和文件类型的注释字符串。因此,您不必显式地告诉每种语言用作注释字符串的内容,而是使用类似以下的内容:

nnoremap <leader>c :call CommentLine()<CR>
function! CommentLine()
    let comment_character = split(&commentstring, '%s')
    exec 'normal I' . comment_character[0] . ' '
endfunction