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

Posted

技术标签:

【中文标题】如何在 Vim 中注释掉一段 Python 代码【英文标题】:How to comment out a block of Python code in Vim 【发布时间】:2011-02-03 10:07:20 【问题描述】:

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

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

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

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

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

【问题讨论】:

不用重新发明***,有一个plugin: tComment给你,它支持多语言的(取消)注释代码。 【参考方案1】:

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

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

第三步: Shift-I#空格(回车左侧插入模式,键入要插入的字符。选择将消失,但其中的所有行将在步骤 4 之后修改。)

第 4 步: Esc

【讨论】:

以这种方式注释行非常有效。有什么方法可以取消注释这些行吗? Shift-I # <ESC> 没用(也许我做错了)。 @rishabh-manocha:使用可视块 (Ctrl-V) 选择所有添加的 # 并键入 x 删除它们。 你要记住 Shift-I 的意思是“在该行的第一个非空白处插入”,所以它不能用于删除。使用 Ctrl-V 进行视觉选择标记要修改的字符,然后“x”删除所选区域中的一个字符,最终删除“#”字符。更多信息请参见 vim 中的 ":h I" 和 ":h CTRL-V"。 @Samaursa Ctrl-V 可能无法在 Windows 上运行。请改用 Ctrl-Q。 要删除2个字符(如果你插入了'#'),将光标定位在要修改的第一行,按ctrl-v进入可视块模式,按j(或向下箭头)要突出显示所有要修改的行,请按 l(或向右箭头)突出显示 2 个字符的宽度(每列按一次以突出显示),然后按 d 删除突出显示的文本。【参考方案2】:

一种手动​​方式

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

【讨论】:

你如何删除它们? @CharlieParker: :10,12s/^#// 为前任的答案竖起大拇指(老派:)【参考方案3】:

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

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

突出显示您的块:

Shift+v

# 评论第一列中的行。

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

【讨论】:

简单就是辉煌!谢谢你! @architectonic 除非您处于可视模式,否则它没有效果,并且“#”在可视模式下未绑定vimdoc.sourceforge.net/htmldoc/visual.html#visual-operators 我修改了一点:Ctrl + k 用于注释 "vnoremap :s#^#\##:noh" > Ctrl + u 用于取消注释: "vnoremap :s#^\###:noh" @JonathanHartley 在这种情况下您不必使用 '/' '#' 是分隔符。所以 :s/^/#/ 和 :s/^#// 是等效的替换。所以用'#'替换行首,用''替换第一列的'#'。 :noh 只是清除搜索字符串,因此完成后没有任何内容突出显示。 @JonathanHartley 老实说,我认为我只是遵循了一种模式而没有考虑它。现在我很惊讶 # vs / 没有早点出现。根据常识更改了答案。谢谢!【参考方案4】:

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

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

要取消注释,请再次突出显示您的块,然后使用以下命令取消注释::norm ^x

:norm 命令对每个选定的行执行一个操作。评论将在每一行的开头插入一个#,取消评论将删除该#

【讨论】:

使用最新的 Vim 和简单的配置,在可视模式下选择行(使用 Shift+v)然后使用 :norm i# 只会更改第一个选定的行。这对我来说可以评论第 389 到 391 行::389,391norm i #【参考方案5】:

我通常扫出一个视觉块(&lt;C-V&gt;),然后搜索并替换第一个字符:

:'<,'>s/^/#

(进入命令模式并自动选择可视块将'放在命令行上)然后我可以通过扫出相同的可视块来取消注释块:

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

我的.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

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

# variable x
x = 0

评论后:

# variable x
#x = 0

取消注释后:

# variable x
x = 0

【讨论】:

很好,但我认为你最好使用更简单的s/^/#/ 正则表达式。我更喜欢注释字符出现在行首……但更重要的是,“注释 cmets”确实相当重要。我也会放弃au BufEnter *.py,因为# cmets 足够通用,默认情况下可以在所有缓冲区中使用命令。【参考方案8】:

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

添加#条评论

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

删除 # 条评论

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

或者如果你的 cmets 是缩进的,你可以这样做 :norm ^x

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

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

What's a quick way to comment/uncomment lines in Vim?

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

NERDcommenter 是一款出色的评论插件,它可以自动检测多种文件类型及其相关的评论字符。使用Pathogen 非常容易安装。

评论&lt;leader&gt;cc。使用&lt;leader&gt;cu 取消注释。并使用&lt;leader&gt;c&lt;space&gt; 切换 cmets。

(vim中默认的&lt;leader&gt;键是\

【讨论】:

【参考方案11】:

有很多 vim 的评论插件——其中一些是多语言的——不仅仅是 python。如果您使用像 Vundle 这样的插件管理器,那么您可以使用例如:

搜索它们(一旦您安装了 Vundle):
:PluginSearch comment

您将获得一个结果窗口。或者你也可以search vim-scripts for comment plugins。

【讨论】:

【参考方案12】:

一个非常轻量级的plugin: vim-commentary。

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

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

【讨论】:

【参考方案13】:

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

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

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

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

【讨论】:

以上是关于如何在 Vim 中注释掉一段 Python 代码的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何注释掉一段?

如何在 vi/Vim 中的多行选择的开头插入文本

在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是啥?

LaTeX 可不可以注释掉一行的某一部分

KEIL如何查看有效代码长度 省略注释

Eclipse怎么注释代码