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

Ris*_*cha 183 python vim editor

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

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

def my_fun(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

#def my_fun(x, y):
#    return x + y
Run Code Online (Sandbox Code Playgroud)

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

the*_*osp 402

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

初始状态

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

选择行

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

评论

第4步: Esc

<Esc>键

  • @ rishabh-manocha:使用visual block(Ctrl-V)选择所有添加的#并输入x以删除它们. (40认同)
  • @Samaursa Ctrl-V可能无法在Windows上运行.请尝试使用Ctrl-Q. (5认同)
  • 用这种方式评论这些线很有效.有没有办法取消注释这些线?`Shift-I#<ESC>`不起作用(也许我做错了). (4认同)
  • 你必须记住,Shift-I的意思是"插入行中的第一个非空白",因此它不能用于删除.使用Ctrl-V进行可视选择标记要修改的字符,然后"x"删除所选区域中的一个字符,最后删除"#"字符.有关详细信息,请参阅vim中的":h I"和":h CTRL-V". (3认同)
  • 要删除 2 个字符(如果插入了“#”),请将光标定位在要修改的顶行,按 ctrl-v 进入可视块模式,按 j(或向下箭头)突出显示要修改的所有行,按l(或向右箭头)突出显示 2 个字符宽度(每列按一次突出显示),然后按 d 删除突出显示的文本。 (3认同)

gho*_*g74 68

单向手动

:set number
:10,12s/^/#
Run Code Online (Sandbox Code Playgroud)

  • @CharlieParker:`:10,12s/^#//` (14认同)
  • 你怎么删除它们? (4认同)
  • 为前回答竖起大拇指(老派:) (2认同)

cda*_*ted 47

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

vnoremap <silent> # :s/^/#/<cr>:noh<cr>
vnoremap <silent> -# :s/^#//<cr>:noh<cr>
Run Code Online (Sandbox Code Playgroud)

突出显示您的区块:

Shift+v
Run Code Online (Sandbox Code Playgroud)

# 从第一列评论您的行.

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

  • 简单就是辉煌!谢谢! (5认同)
  • @architectonic除非您处于视觉模式,否则它不会产生任何效果,并且“#”在视觉模式下未绑定http://vimdoc.sourceforge.net/htmldoc/visual.html#visual-operators (2认同)
  • @JonathanHartley,在这种情况下,您不必使用“/”,“#”是分隔符。因此 :s/^/#/ 和 :s/^#// 是等效的替换。因此,将行首替换为“#”,并将第一列中的“#”替换为“”。&lt;cr&gt;:noh&lt;cr&gt; 只是清除搜索字符串,因此完成后不会突出显示任何内容。 (2认同)
  • @JonathanHartley 老实说,我认为我只是遵循了一种模式而没有考虑它。现在我很惊讶 # vs / 没有早点出现。根据常识更改了答案。谢谢! (2认同)

小智 25

突出显示您的区块: ShiftV

用以下内容注释所选块:( :norm i#小写i)

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

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


小智 22

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

:'<,'>s/^/#
Run Code Online (Sandbox Code Playgroud)

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

:'<,'>s/^#//
Run Code Online (Sandbox Code Playgroud)


Geo*_*edy 19

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


Luk*_*sky 8

我的帖子中有以下几行.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
Run Code Online (Sandbox Code Playgroud)

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

# variable x
x = 0
Run Code Online (Sandbox Code Playgroud)

评论后:

# variable x
#x = 0
Run Code Online (Sandbox Code Playgroud)

不显眼之后:

# variable x
x = 0
Run Code Online (Sandbox Code Playgroud)


Dar*_*rek 5

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


Abi*_*aba 5

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

评论<leader>cc.取消注释<leader>cu.并用以下方式切换评论<leader>c<space>.

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


Pie*_*erz 5

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

:PluginSearch comment
Run Code Online (Sandbox Code Playgroud)

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

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


Mag*_*nus 5

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

添加#条评论

1. shift V to visually select lines
2. :norm i#
Run Code Online (Sandbox Code Playgroud)

删除 # 条评论

1. visually select region as before
2. :norm x
Run Code Online (Sandbox Code Playgroud)

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

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

在此处的答案之一中使用“norm”命令的更详细答案

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