私はそれから学んだこのスタックオーバーフローの質問vi
/を使用して、vim
指定された範囲の行番号をコメントアウトできます。たとえば、次のようなbashスクリプトがあるとします。
#!/bin/bash
This
is
my
very
very
great
script
ここで、コメント文字を使用して6行から8行(単語および含む)をコメントアウトするとvery
仮定very
しgreat
ます#
。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-v
8行目に進み、を押します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ディストリビューションではシンボリックリンクなので、実際には入力しますvim
。vim
vi
コメントを削除するには、次のように入力するか、:6,8s/^#//
記号の前にあるいくつかの先行スペースを:6,8s/^\s*#//
削除します。#
答え4
を使用している可能性がありますvim.tiny
。とにかく、次の方法で元のコメントを削除できます。
:6,8s/^#//
もちろん、別の方法で挿入する場合(たとえば、余分なスペースを使用する場合)、その中の他のコンテンツを削除する必要があるかもしれません。完全なvimを使用すると、視覚的に列を選択して文字を挿入/削除することが同じことを行うより簡単な方法です。