在行尾附加(或删除)分号是一种常见的操作。然而,诸如A;
修改当前光标位置之类的命令并不总是理想的。
有没有一种直接的方法来映射命令(例如;;
)来切换分号是否出现在行尾?
我目前在我的 vimrc 中使用这个命令来追加:
map ;; A;<Esc>
在行尾附加(或删除)分号是一种常见的操作。然而,诸如A;
修改当前光标位置之类的命令并不总是理想的。
有没有一种直接的方法来映射命令(例如;;
)来切换分号是否出现在行尾?
我目前在我的 vimrc 中使用这个命令来追加:
map ;; A;<Esc>
像这样的东西会起作用
nnoremap ;; :s/\v(.)$/\=submatch(1)==';' ? '' : submatch(1).';'<CR>
这使用替代命令并检查最后一个字符是否为分号,如果是,则将其删除。如果没有将其附加到匹配的字符。这\=
在替换部分使用 a 来执行 vim 表达式。
如果您不想匹配任何任意字符,您可以将其包装在一个函数中并传入您想要匹配的字符。
function! ToggleEndChar(charToMatch)
s/\v(.)$/\=submatch(1)==a:charToMatch ? '' : submatch(1).a:charToMatch
endfunction
然后映射将切换分号。
nnoremap ;; :call ToggleEndChar(';')<CR>
我认为我不需要在 EOL中删除分号,但要添加分号,我有
nnoremap ,; m`A;<Esc>``
它设置上下文标记,附加分号并跳回。