在行尾切换分号(或其他字符)

cod*_*tum 5 vim

将分号附加(或删除)到行尾是一种常见操作.然而,A;修改当前光标位置等命令并不总是理想的.

是否有一种直接的方法来映射命令(例如;;)以切换分号是否出现在一行的末尾?

我正在我的vimrc中使用此命令追加:

map ;; A;<Esc>
Run Code Online (Sandbox Code Playgroud)

FDi*_*off 5

这样的事情会起作用

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)