vim 中的条件搜索和替换?

vim 中的条件搜索和替换?

假设我想评论和取消注释一行。

我知道我可以

:s!^!//!

进而

:s!^//!!

现在如果我想把它作为一句台词怎么办?

基本上,如果一行以 开头,//然后将其删除,别的添加它。

我想将此命令映射到一个快捷方式,而不是两个。

答案1

我很确定这不能直接完成。不过,我为你想出了一个功能。把这个放在你的~/.vimrc

function! Toggle()
    s!^\(\s*/\?[^/\s]/\?\)!xxx//\1!e
    s!^\(\s*\)//!\1!e
    s!^xxx//!//!e
endfunc

(这会将xxx//行开头已有的任何内容更改为//,但我认为这种情况很少发生)。您可以随时使用 来调用它:call Toggle(),但您可能会发现将其映射到键/组合会更方便。下面将其映射到Ctrl+ /;当然,您可以替换您喜欢的任何组合键(询问您是否需要帮助映射到另一个组合)。也将其放入您的~.vimrc

nnoremap <C-/> :call Toggle()<CR>
vnoremap <C-/> :call Toggle()<CR>
inoremap <C-/> <Esc>:call Toggle()<CR>i

它们分别将Ctrl+映射/到正常、可视和插入模式下的函数。请注意,插入映射将使您返回到插入模式,但将光标移动到行的开头。如果您希望保持正常模式,只需i从行尾删除 即可inoremap

(更新以处理空格。删除//空格后,但始终插入到行的开头)

相关内容