如何在Vim中注释掉Python代码块


186

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

所以基本上是可以转换以下内容的东西

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

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

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


无需重新设计轮子,这里有一个插件:tComment为您服务,它支持(取消)多种语言的代码。
喵2016年

Answers:


411

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

初始状态

步骤2:按:Ctrl+,v然后选择要注释的行:

选择线

步骤3: Shift - I#space(进入插入-在左模式,键入字符插入的选择将消失,但在其内的所有线将在步骤4之后进行修改)

评论

第4步: Esc

<Esc>


4
用这种方式注释行非常有用。有什么方法可以取消注释这些行吗?Shift-I # <ESC>没有用(也许我做错了)。
Rishabh Manocha 2010年

41
@ rishabh-manocha:使用可视块(Ctrl-V)选择所有添加的#,然后键入x删除它们。
theosp'4

3
您必须记住Shift-I的意思是“在该行的第一个非空白处插入”,因此它不能用于删除。使用Ctrl-V进行视觉选择会标记要修改的字符,然后“ x”会删除所选区域中的一个字符,最终会删除“#”字符。有关更多信息,请参见vim中的“:h I”和“:h CTRL-V”。
Tin

5
@Samaursa Ctrl-V可能无法在Windows上运行。请尝试按Ctrl-Q。
AZ。

1
要删除2个字符(如果您插入了“#”),请将光标定位在要修改的第一行,按ctrl-v进入可视块模式,按j(或向下箭头)突出显示所有要修改的行,按l(或向右箭头)突出显示2个字符的宽度(每列按一次突出显示),然后按d删除突出显示的文本。
thinkmassive 2014年


49

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

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

突出显示您的方块:

Shift+v

# 在第一列中注释您的行。

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


5
简单就是辉煌!谢谢!
I159

1
@architectonic它没有效果,除非你是在可视化模式,和“#”是全球视觉模式绑定vimdoc.sourceforge.net/htmldoc/visual.html#visual-operators
cdated

1
我修改了一下:Ctrl + k注释“ vnoremap <silent> <Ck>:s#^#\ ## <cr>:noh <cr>”> Ctrl + u注释:“ vnoremap <silent> <Cu >:s#^ \ ### <cr>:noh <cr>“
Pradip Das

1
@JonathanHartley在这种情况下,您不必使用'/',而'#'是分隔符。所以:s / ^ /#/和:s / ^#//是等效的替换。因此,将行首替换为“#”,并将第一列中的“#”替换为“”。<cr>:noh <cr>只会清除搜索字符串,因此完成后不会突出显示任何内容。
cdated

1
老实说,@ JonathanHartley我认为我只是遵循了一个模式而没有考虑它。现在,我很惊讶#vs /没有很快出现。根据常识更改了答案。谢谢!
录制

26

突出显示您的方块: ShiftV

用以下方式注释掉选定的块:(:norm i#小写i)

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

:norm命令为每个选定的行执行一个动作。注释将#在每行的开头插入一个,而注释不删除将删除该行#


使用最新的Vim和​​简单的配置,在可视模式下选择行(带有Shift+v),然后:norm i#仅使用更改第一条选定的行。这对我来说可以评论389到391行::389,391norm i #
mmell,2014年

22

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

:'<,'>s/^/#

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

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


9

我的代码如下.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

取消理解后:

# variable x
x = 0

很好,但是我认为使用更简单的正则s/^/#/表达式会更好。我更喜欢在行的开头出现注释字符……但是更重要的是,“注释注释”确实非常重要。我还将删除au BufEnter *.py,因为#注释足够通用,默认情况下所有缓冲区都可以使用该命令。
travc 2014年

5

坦白说,我对该链接使用了tcomment插件。它几乎可以处理所有语法。它定义了不错的动作,将其与一些特定于python的文本块匹配器配合使用,使其成为一个功能强大的工具。


5

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

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

<leader>vim中的默认键是\


3

vim有很多注释插件-其中许多是多语言的-不只是python。如果您使用Vundle之类的插件管理器,则可以使用以下命令搜索它们(一旦安装了Vundle):

:PluginSearch comment

您将获得一个结果窗口。或者,您可以只在vim脚本中搜索注释插件


3

无需插件或映射。尝试使用内置的“规范”命令,该命令实际上会在每条选定的行上执行所需的任何操作。

添加#条评论

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中注释/取消注释行的快速方法是什么?


1

一个非常轻巧的插件:vim-commentary。

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

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


0

CtrlK 进行评论(可视模式):

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

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

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.