Vim:在新行中自动注释

Pat*_*ity 9 vim comments newlines text-formatting

当我从注释掉的行开始新行时,Vim 会自动插入注释,因为我已经设置了formatoptions=tcroql. 例如(光标为*):

// this is a comment*
Run Code Online (Sandbox Code Playgroud)

在点击<Enter>(插入模式)或o(正常模式)后,我剩下:

// this is a comment
// *
Run Code Online (Sandbox Code Playgroud)

这个功能在写长的多行注释时非常方便,但通常我只想要单行注释。现在,如果我想结束评论系列,我有几个选择:

  • <Esc>S
  • 打了<BS>三下

这两者都提供了三个按键,再加上<Enter>这意味着一个新行需要四个按键,我认为这太多了。理想情况下,我想再打<Enter>一次:

// this is a comment
*
Run Code Online (Sandbox Code Playgroud)

重要的是该解决方案也适用于不同的缩进级别,即

int main(void) {
    // this is a comment*
}
Run Code Online (Sandbox Code Playgroud)

<Enter>

int main(void) {
    // this is a comment
    // *
}
Run Code Online (Sandbox Code Playgroud)

<Enter>

int main(void) {
    // this is a comment
    *
}
Run Code Online (Sandbox Code Playgroud)

我想我几年前在一些文本编辑器中看到过这个功能,但我不记得是哪一个了。有没有人知道可以在 Vim 中为我执行此操作的解决方案?关于如何推出我自己的解决方案的正确方向的指针也非常受欢迎。

rom*_*inl 4

尝试这个:

function! EnterEnter()
  if getline(".") =~ '^\s*\(//\|#\|"\)\s*$'
    return "\<C-u>"
  else
    return "\<CR>"
  endif
endfunction

imap <expr> <CR> EnterEnter()
Run Code Online (Sandbox Code Playgroud)