可以使用计数和运动的Vim命令吗?

时间:2011-04-28 21:50:55

标签: vim

我的核心问题是如何创建允许计数和动作的自定义映射。但我希望伯爵能够推翻议案。为了澄清我希望以下工作:

[count][cmd] - 在[count]行做一些有用的事情,而不是等待[动作]。

[cmd][motion] - 在行的[动作]范围内做一些有用的事情。

我的确切方案是尝试向行添加注释,但我会将此信息用于我的vimrc中的其他映射。这是我到目前为止所拥有的。

"comment motion of lines
nmap <silent> ,c  :set opfunc=Comment<CR>g@
"comment count lines
nmap <silent> ,cc :s/^/\/\//<CR>:noh<CR>

function! Comment(...)
        silent exe "'[,']s/^/\\/\\//"
        silent exe "noh"
endfunction

,c[motion]按动议评论。 [count],cc按计数评论一行。

我希望,c[motion][count],c能够正常工作。

这可能吗?

编辑:澄清我的问题。将“范围”更改为“计数”

1 个答案:

答案 0 :(得分:6)

function s:ExecuteCountOrMotion()
    setlocal operatorfunc=Comment
    if v:count is 0
        return 'g@'
    else
        return 'g@g@'
    endif
endfunction
nnoremap <expr> ,c <SID>ExecuteCountOrMotion()

顺便说一下,你不需要执行:

  1. 您应该写silent exe "{range}s/.../.../"
  2. 而不是{range}s/.../.../e
  3. 您可以使用s#^#//#e来避免转义。
  4. silent nohlsilent execute "nohl"的效果一样,但会导致vim不解析其他行。