viまたはvimを使用して、行番号で指定された複数行のコードをコメントアウトします。

viまたはvimを使用して、行番号で指定された複数行のコードをコメントアウトします。

私はそれから学んだこのスタックオーバーフローの質問vi/を使用して、vim指定された範囲の行番号をコメントアウトできます。たとえば、次のようなbashスクリプトがあるとします。

#!/bin/bash

This
is
my
very
very
great
script

ここで、コメント文字を使用して6行から8行(単語および含む)をコメントアウトするとvery仮定verygreatます#vi/に入力すると、次のようになりますvim:6,8s/^/#

#!/bin/bash

This
is
my
#very
#very
#great
script

6〜8行はコメントアウトされています。

私の質問は、次のライナーを入力することは可能ですか?削除する6~8行のコメント文字#(ファイルの他のコメント行は除く)?

viしかし、実際にvim。実際には、script.shこのコマンドを使用してファイルを開きますvi script.sh。また、コマンドを入力するとwhich vi表示されます/usr/bin/vi。ただし、単に入力してviキーを押すと、Enter次のような結果が表示されます。

~                              VIM - Vi IMproved
~
~                               version 7.2.330
~                           by Bram Moolenaar et al.
~                 Vim is open source and freely distributable
~
~                           Sponsor Vim development!
~                type  :help sponsor<Enter>    for information
~
~                type  :q<Enter>               to exit
~                type  :help<Enter>  or  <F1>  for on-line help
~                type  :help version7<Enter>   for version info

これは私が実際に使用していることを示すようですvim。私はSSHを使って私のPCからリモートUbuntu Linuxクラスタにアクセスしています。私はUbuntu Linux GUIを使用していません。

答え1

あなたはそれを使用することができます:

:6,8s/^#//

しかし、ブロックビジュアル選択モードを使用する方がはるかに簡単です。 6行目の先頭に移動してを押し、Ctrl-v8行目に進み、を押しますx

しかも「ナード評論家」はめ込む。

答え2

viあなたの質問にorを使用することがわかっていますが、手動でファイルを開かずにvimこれを行うことができるいくつかのオプションは次のとおりです。

  • 真珠

    perl -ne 'if($. <=8 && $. >= 6){s/^\s*#//;}print' foo.sh 
    
  • Perlバージョン> = 5.10

    perl -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh 
    

    これにより、ファイルの内容が印刷され、別のファイル(> new_file.sh)にリダイレクトしたり、iファイルの内部編集を使用したりできます。

    perl -i -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh 
    
  • sed

    sed '6,8 s/^ *#//' foo.sh
    

    同様に、元のファイルをその場で編集するには、次のようにしますi

    sed -i '6,8 s/^ *#//' foo.sh
    
  • awk/gawkなど:

    gawk '(NR<=8 && NR>= 6){sub("^ *#","")}{print}' foo.sh
    
  • 純粋なbash:

    c=1; while read line; do 
      if [ $c -ge 6 ] && [ $c -le 8 ]; then 
         echo "${line/\#/}"
      else 
         echo $line 
      fi
      let c++; done < foo.sh
    

答え3

viはほとんどのGNU / Linuxディストリビューションではシンボリックリンクなので、実際には入力しますvimvimvi

コメントを削除するには、次のように入力するか、:6,8s/^#//記号の前にあるいくつかの先行スペースを:6,8s/^\s*#//削除します。#

答え4

を使用している可能性がありますvim.tiny。とにかく、次の方法で元のコメントを削除できます。

:6,8s/^#//

もちろん、別の方法で挿入する場合(たとえば、余分なスペースを使用する場合)、その中の他のコンテンツを削除する必要があるかもしれません。完全なvimを使用すると、視覚的に列を選択して文字を挿入/削除することが同じことを行うより簡単な方法です。

関連情報