我在vi中打开了一个Ruby代码文件,其中有行注释为#:

class Search < ActiveRecord::Migration
  def self.up
    # create_table :searches do |t|
    #   t.integer :user_id
    #   t.string :name
    #   t.string :all_of
    #   t.string :any_of
    #   t.string :none_of
    #   t.string :exact_phrase
    # 
    #   t.timestamps
    # end
  end

  def self.down
    # drop_table :searches
  end
end

假设我想取消注释第一个定义中的所有行。。。端部。在Vim中有什么有效的方法可以做到这一点?

总的来说,我正在寻找一种简单、流畅的方式来注释和取消注释行。这里我处理的是Ruby代码,但可能是JavaScript(//)或Haml(-#)。


当前回答

tpope有一个改变生活的插件,叫做vim comments

https://github.com/tpope/vim-commentary

此插件提供:

神志正常正确缩进注释不注释空/不必要的行

用法:

通过Vundle(我猜是病原体)安装。突出显示文本并按:,将显示为:<,'>在此处键入注释:<,'>注释,然后按Enter键。繁荣你做的花蕾。

其他回答

指定要在vim中注释的行:

显示行号:

:set number

然后

:5,17s/^/#/     this will comment out line 5-17

或者:

:%s/^/#/        will comment out all lines in file

注释一行(适用于所有语言):

noremap<silent>,//:调用CommentLine()<CR>

我们可以用许多行来调用它,在视觉模式下也可以。Like:要注释四行,请使用4,//,要取消注释,请使用5,/。

要取消注释A行(适用于所有语言):

noremap<silent>,/:调用UnCommentLine()<CR>

若要添加新符号[comment],请添加一个列表并在函数中添加一些行。如果您想添加一种语言,该语言的注释符号已经在其中一个列表中定义,只需在相应的列表中添加您的语言名称即可(要获得正确的名称:在vim中打开文件并使用:set ft获取您的语言的正确名称)。

CommentLine()的定义

作用注释行()让slash_ft_list=['c','cpp','java','scala','systemverilog','verilog'、'verilog_systemverilog']让hash_ft_list=[sh','ruby','python','csh','sconf','fstab','perl']让perct_ft_list=['tex']让mail_ft_list=['mail']让quote_ft_list=['vim']如果(索引(slash_ft_list,&ft)!=-1):规范I//elseif(索引(hash_ft_list,&ft)!=-1):规范I#elseif(索引(perct_ft_list,&ft)!=-1):标准I%elseif(索引(mail_ft_list,&ft)!=-1):规范I>elseif(索引(quote_ft_list,&ft)!=-1):规范I“结束符端函数

UnCommentLine()的定义

作用取消注释行()让slash_ft_list=['c','cpp','java','scala','systemverilog','verilog'、'verilog_systemverilog']让hash_ft_list=[sh','ruby','python','csh','sconf','fstab','perl']让perct_ft_list=['tex']让mail_ft_list=['mail']让quote_ft_list=['vim']如果(索引(slash_ft_list,&ft)!=-1):标准^2xelseif(索引(hash_ft_list,&ft)!=-1):标准^xelseif(索引(perct_ft_list,&ft)!=-1):标准^xelseif(索引(mail_ft_list,&ft)!=-1):标准^xelseif(索引(quote_ft_list,&ft)!=-1):标准^x结束符端函数

如果您已经知道行号,那么n,ms/#//将起作用。

我个人想评论一下Visual Studio。我在工作中已经习惯了它,以至于它占据了我的肌肉记忆(使用vsvim)。使用shift+v选择所需的行,然后按ctrl+k,ctrl+c进行注释,或按ctrl+k,ctrl+u取消注释。

:vnoremap <C-k><C-c> :norm i//<Cr>
:vnoremap <C-k><C-u> :s/\/\///g<Cr>:noh<Cr>

一些常规的Vim命令不适用于我在Windows上的设置。Ctrl+v和Ctrl+q是其中的一些。后来我发现以下方法可以取消注释行。

鉴于

一些缩进的注释

   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim
   # Practice in Vim

以下方法删除#符号并保留缩进。

方法

将光标移动到第一条注释(箭头或h、j、k、l)。然后应用以下技术之一:

视觉块模式(更快)

Ctrl+Shift+v进入视觉块模式js来选择垂直线。l包括水平字符(可选)x删除块

搜索/替换+Regex

选择具有常规视觉模式的文本,即Shift+v类型:。您将得到提示“<,”>。键入regex,例如s/#//将哈希值替换为空。(可选:键入s/#//以包含空格)。进来

:norm命令

选择具有常规视觉模式的文本,即Shift+v类型:。您将得到提示“<,”>。发出命令。键入:norm ^x以删除第一个非空白字符和下一个字符。(可选:如果不缩进,请尝试:norm x,或:norm ^xx以包含空格)。进来

g模式

选择具有常规视觉模式的文本,即Shift+v类型:。您将得到提示“<,”>。发出命令。键入g/#/nom^x。(可选:键入g/#/nom!^xx以包含空格)。进来

后果

    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim
    Practice in Vim

另请参见

关于删除缩进的评论的帖子关于如何快速评论Vim的帖子Primagen的g命令教程。VimTrick的注释代码教程