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