如何在Vim中注释掉一段Python代码

How to comment out a block of Python code in Vim

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

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

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

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

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


第1步:转到要评论的第一行的第一列。

Initial State

第2步:按:Ctrl + v并选择要评论的行:

Select lines

步骤3:Shift- I space(在左侧插入模式,输入要插入的字符。选择将消失,但其中的所有行将在步骤4之后修改。)

Comment

第4步:Esc

<Esc>


单向手动

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


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

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

突出显示您的区块:

1
Shift+v

#来评论第一列中的行。

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


使用以下命令突出显示您的块:ShiftV

使用以下选项对所选块进行注释::norm i#(小写i)

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

:norm命令为每个选定的行执行操作。注释将在每行的开头插入#,取消注释将删除#


我通常扫出一个视觉块(),然后搜索并替换第一个字符:

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

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

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

有一些很好的插件可以帮助评论/取消注释行。例如NERD评论者。


我的.vimrc中有以下几行:

1
2
3
4
5
6
7
8
9
10
11
" 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/#
/
/ge<CR>:noh<CR>gv`n

只要它们以#开头(#后面有空格),快捷方式就会保留光标位置和注释。例如:

1
2
# variable x
x = 0

评论后:

1
2
# variable x
#x = 0

不显眼之后:

1
2
# variable x
x = 0


NERDcommenter是一个出色的评论插件,可以自动检测多种文件类型及其相关的注释字符。使用Pathogen可以轻松安装。

cc评论。取消注释cu。并使用c切换评论。

(vim中的默认键是\)


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


无需插件或映射。尝试内置的"norm"命令,它可以在每个选定的行上执行您想要的任何操作。

添加#评论

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

删除#Comments

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

或者,如果你的评论是缩进的,你可以做:norm ^x

请注意,这些只是普通的vim命令,前面是":norm",以便在每一行上执行它们。

在这里的一个答案中使用"norm"命令的更详细的答案

什么是在Vim中评论/取消注释行的快速方法?


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

gcc评论一行
gcgc取消注释。查看插件页面了解更多信息。

v + k / j突出显示该块然后gcc来评论该块。


用于评论的CtrlK(可视模式):

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

用于取消注释的CtrlU(可视模式):

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

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

1
:PluginSearch comment

你会得到一个结果窗口。或者,您可以只搜索vim-scripts以获得评论插件。