我的核心问题是如何创建允许计数和动作的自定义映射。但我希望伯爵能够推翻议案。为了澄清我希望以下工作:
[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
能够正常工作。
这可能吗?
编辑:澄清我的问题。将“范围”更改为“计数”答案 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()
顺便说一下,你不需要执行:
silent exe "{range}s/.../.../"
。{range}s/.../.../e
s#^#//#e
来避免转义。silent nohl
与silent execute "nohl"
的效果一样,但会导致vim不解析其他行。