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

时间:2013-08-10 00:34:20

标签: vim

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

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

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

map ;; A;<Esc>

2 个答案:

答案 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>``

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