5

在行尾附加(或删除)分号是一种常见的操作。然而,诸如A;修改当前光标位置之类的命令并不总是理想的。

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

我目前在我的 vimrc 中使用这个命令来追加:

map ;; A;<Esc>
4

2 回答 2

5

像这样的东西会起作用

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>
于 2013-08-10T00:48:42.867 回答
3

我认为我不需要在 EOL中删除分号,但要添加分号,我有

nnoremap ,; m`A;<Esc>``

它设置上下文标记,附加分号并跳回。

于 2013-08-10T08:03:35.353 回答