我想知道在Vim中是否有任何键映射允许我缩进某些行代码(是否这些行已在可视模式下选择,或在当前光标位置上方/下方的n行)。

所以基本上可以转换以下内容

def my_fun(x, y):
    return x + y

to

#def my_fun(x, y):
#    return x + y

我可以使用#或“”来注释掉相关的行。理想情况下,如果给定的行已被注释掉,我还希望使用相同的键映射来取消注释。


当前回答

我通常扫出一个可视块(<C-V>),然后搜索并替换第一个字符:

:'<,'>s/^/#

(进入命令模式,选择一个可视块自动放置'<,'>在命令行上)然后我可以通过清除相同的可视块来取消注释块,并且:

:'<,'>s/^#//

其他回答

单向手动

:set number
:10,12s/^/#

我通常扫出一个可视块(<C-V>),然后搜索并替换第一个字符:

:'<,'>s/^/#

(进入命令模式,选择一个可视块自动放置'<,'>在命令行上)然后我可以通过清除相同的可视块来取消注释块,并且:

:'<,'>s/^#//

我在我的.vimrc中有以下行:

" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N><C-N>    <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n

" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N>n     <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n

快捷键保留您的光标位置和注释,只要它们以#开头(在#后面有空格)。例如:

# variable x
x = 0

后评论:

# variable x
#x = 0

uncomennting之后:

# variable x
x = 0

一个非常小的轻量级插件:vim-commentary。

GCC来注释一行 GCGC对此不予置评。查看插件页面了解更多信息。

V +k/j突出显示块,然后GCC注释该块。

有一些很好的插件可以帮助注释/取消注释行。比如书呆子评论家。

NERD评论者的快捷方式示例:

[count]|<Leader>|cc |NERDCommenterComment|
Comment out the current line or text selected in visual mode.

[count]|<Leader>|cu |NERDCommenterUncomment|
Uncomments the selected line(s).

完整的文档在这里。