如何在 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使用以下命令突出显示您的块:ShiftV
用:norm i#
(小写i)注释掉选定的块
要取消注释,请再次突出显示您的块,然后使用以下命令取消注释::norm ^x
:norm
命令对每个选定的行执行一个操作。评论将在每一行的开头插入一个#
,取消评论将删除该#
。
【讨论】:
使用最新的 Vim 和简单的配置,在可视模式下选择行(使用Shift+v
)然后使用 :norm i#
只会更改第一个选定的行。这对我来说可以评论第 389 到 391 行::389,391norm i #
【参考方案5】:
我通常扫出一个视觉块(<C-V>
),然后搜索并替换第一个字符:
:'<,'>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 非常容易安装。
评论<leader>cc
。使用<leader>cu
取消注释。并使用<leader>c<space>
切换 cmets。
(vim中默认的<leader>
键是\
)
【讨论】:
【参考方案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 代码的主要内容,如果未能解决你的问题,请参考以下文章