将分号附加(或删除)到行尾是一种常见操作.然而,A;修改当前光标位置等命令并不总是理想的.
是否有一种直接的方法来映射命令(例如;;)以切换分号是否出现在一行的末尾?
我正在我的vimrc中使用此命令追加:
map ;; A;<Esc>
Run Code Online (Sandbox Code Playgroud)
这样的事情会起作用
nnoremap ;; :s/\v(.)$/\=submatch(1)==';' ? '' : submatch(1).';'<CR>
Run Code Online (Sandbox Code Playgroud)
这将使用替代命令,并检查最后一个字符是否为分号,如果已删除则将其删除。如果不是,则将其附加到匹配的字符上。\=在替换部分使用a 来执行vim表达式。
如果您不想匹配任何任意字符,则可以将其包装在函数中,然后传入要匹配的字符。
function! ToggleEndChar(charToMatch)
s/\v(.)$/\=submatch(1)==a:charToMatch ? '' : submatch(1).a:charToMatch
endfunction
Run Code Online (Sandbox Code Playgroud)
然后映射将是切换分号。
nnoremap ;; :call ToggleEndChar(';')<CR>
Run Code Online (Sandbox Code Playgroud)