如何在Vim注释掉一个Python代码块

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

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

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

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

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

117615 次浏览

单向手动

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

步骤1:转到你想注释的第一行的第一列。

初始状态

步骤2:按:Ctrl+v,选择你想注释的行:

Select lines

步骤3: 转变-I空间(进入左插入模式,输入字符插入。选择将消失,但其中的所有行将在步骤4后被修改。)

Comment

步骤4: Esc

<Esc>

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

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).

完整的文档位于在这里

我通常扫出一个可视块(<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

您可以将以下映射添加到您的.vimrc

vnoremap <silent> # :s/^/#/<cr>:noh<cr>
vnoremap <silent> -# :s/^#//<cr>:noh<cr>

突出你的区块:

Shift+v

#来注释第一列中的行。

-#以同样的方式取消注释。

坦率地说,我使用一个tcomment插件链接。它可以处理几乎所有的语法。它定义了漂亮的移动,使用它与一些特定于python的文本块匹配器使它成为一个强大的工具。

转变V突出显示你的块

:norm i#(小写i)注释所选的块:

要取消注释,请再次突出显示您的块,并使用::norm ^x取消注释

:norm命令对每一行执行一个操作。注释将在每行开始处插入#,而取消注释将删除该#

NERDcommenter是一个优秀的注释插件,它可以自动检测一些文件类型及其相关的注释字符。使用致病源安装非常简单。

<leader>cc注释。用<leader>cu取消注释。并使用<leader>c<space>切换注释。

(vim中默认的<leader>键是\)

有很多用于vim的注释插件——其中一些是多语言的——而不仅仅是python。如果你使用像Vundle这样的插件管理器,那么你可以搜索它们(一旦你安装了Vundle),例如:

:PluginSearch comment

你会得到一个结果窗口。或者你可以直接搜索vim-scripts中的注释插件

正如在其他答案中提到的,NERDCommenter是一个很好的答案-有关使用它的更多信息,请参阅这个答案。注意:<leader>键通常是。例如,要注释掉一行,输入:cc

CtrlK for comment (Visual Mode):

vnoremap <silent> <C-k> :s#^#\##<cr>:noh<cr>

CtrlU for uncomment(可视模式):

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>

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

< >强gcc < / >强注释一行
gcgc取消注释。查看插件页面了解更多信息。

< >强v + k / j < / >强突出显示块,然后< >强gcc < / >强注释该块。

不需要插件或映射。试试内置的“norm”命令,它可以在每个选定的行上执行您想要的任何命令。

添加#注释

1. shift V to visually select lines
2. :norm i#

删除#注释

1. visually select region as before
2. :norm x

或者如果注释是缩进的,可以执行:norm ^x

注意,这些只是普通的vim命令,前面加了“:norm”,以便在每行上执行它们。

关于使用“norm”命令的更详细的答案在这里

在Vim中注释/取消注释行有什么快速方法?< / >