set -o viを使用する利点


55

このコマンドを使用してオプションをviに設定する多くの開発者を見てきました。私はこれの本当の使用を理解したことがありませんか?

bashコマンドを使用する場合、viに切り替えるとどのようなヘルプが提供されますか?

回答:


58

readlineの編集をemacs(デフォルト)またはvi(set -o vi)に設定することにより、シェルと選択したエディターで編集コマンドを本質的に標準化できます1

したがって、シェルでコマンドを編集する場合は、テキストエディターを使用する場合と同じコマンド2を使用します。これは、1つのコマンド構文を覚えるだけでよいことを意味します(それが十分に有利でなかった場合)。

シェル履歴から任意のコマンドを取得し、ヒットEscapeしてコマンドモードに入り、を押すと、viモードでこの関係をさらに活用できますv。満足のいくようにコマンドの編集が完了する:wqと、コマンドがシェルで実行されます。


1.もちろん、EmacsまたはVi / mをエディターとして使用すると仮定します。
2.または、より正確には、そのサブセット...


1
私は、聖杯を得た:)....
Sathyam

3
Esc-vトリックはset -o vi、ほとんどの人が知らない最高の機能の1つです。これは、同じコマンドを異なる引数で(複数のコマンドラインコマンドとして)複数回発行する場合に特に当てはまります。
マイケルゴールドシュテイン

2
Esc-vトリックは、実際にはに固有の利点ではありませんset -o vi。デフォルト設定のset -o EMACSCx、Ceは、emacsウィンドウ(または、$EDITOR設定されている場合は)を表示します。このウィンドウで、コマンドを実行する前に編集できます。
ジョン・ガワー

8

Android向けのConnectBotのようなモバイルSSHクライアントを使用している場合、Viモードはユーザビリティを大幅に改善します。

これは、修飾キーへの依存が減少したためです。

Vimは、Android UIに組み込まれているネイティブの編集方法など、他のものよりもスマートフォンやタブレットの仮想キーボードで使用する方がはるかに簡単です。皮肉なことに、SSHセッションでVimを使用してCソースを編集する方が、その目的のためにプラットフォーム独自の編集ウィジェットでインスタントメッセージを編集するよりも簡単です。

シェルviモードには、同様の利点があります。


携帯電話のキーボードにviモードがあることを望んでいました。これは既に存在するかのように言及しています。携帯電話でviモードを取得するにはどうすればよいですか?
meh

6

viモードと操作を使用して、コマンドラインで編集できます。

例はそれをより明確にするのに役立ちます:

入力する cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

しかし、エラーが発生します-入力しfile1.txtないでくださいfile1.xt

このオプションが設定されていない場合は、上矢印キーを押してから左矢印キーを押して、35回繰り返し、...に到達して.xtから余分なキーを入力しますt。合計キーストローク:37

では、このオプションは、プレス(例えば)を1回上矢印できる設定は、行の先頭に移動するには、コマンドモード、0のためにエスケープし、その後/xt[return]に取得しxtた後、次のように入力することができますi挿入モード用と行方不明トンを入力します。これはいくつかの点でめちゃくちゃ複雑に思えるかもしれませんが、vimユーザーの場合、これらのコマンドはすでに非常によく知られています。合計キーストローク:9


1
Emacsモードでも数個Alt+Bのsまたはaを使用できるため、Ctrl+Alt+] .これは私にとって強力な例ではないようです。
ミケル14

2
私たちがゴルフをしていると見て:Emacsのモード:UpCtrl+Alt+].RighttEnter= 8 Viのモード:UpF.atEnter= 7 :)
ミケル

@Mikelは、挿入モードでviモードが開始することを忘れていたのでEsc、そこにもいるので、それは死の熱です。
dragon788

5

直接的な利点があるかどうかはわかりません。私はvi20年以上ユーザーです。私はscreenさらに長い間、viキーを使用する他のプログラムのユーザーです。bashで「vi」モードを設定することを好むのは自然なことです。しかし、私は自分の仕事で何百ものサーバーで作業しています。ほとんどのサーバーはデフォルトの「emacs」モードに設定されています。したがって、両方のモードを使用する必要があります。しかし、それは本当に好みの問題です。


私にとって同様の状況-私はvimを頻繁に使用していますが、行の切り替えを追加するよりも、デフォルトのemacsのようなreadlineキー(viサブセットと同じくらい便利かもしれません)に習熟することは常に仕事が少ないことを発見しました私が出くわすすべての新しいシステムでviモードに。
jw013

1
私は何百台ものサーバーでは動作しませんが、sshrcを使用して、異なるコンピューター間でbashのセットアップを同じように保ちますssh。もちろん、自分の機材が.bashrc置かれていないマシンをローカルで使用している場合、それは役に立ちません。
カイルストランド

4

主な利点は、コマンドラインのモーダル編集です。Vimに精通していて、その哲学が気に入っている場合、その利点は明白でなければなりません。あなたがそれを経験しているなら、あなたの指の筋肉記憶はあなたを超高速であなたのbashコマンドを編集させます。

NB:モーダル編集が気に入らない場合でも、(デフォルトの)emacs-modeを利用することを学ぶ必要があります。以下のreadlineような、あらゆるプロセスで動作する気の利いたキーボードショートカットいくつか紹介しますbash


1

に慣れるviと、シェルエディタとしてviモードに設定します。それが明らかな理由でしょう。もう1つはbash、一部のOS(ほとんどがAIX、SolarisなどのUNIX)でデフォルトで使用できないため、シェル履歴機能を使用できないため、シェルエディターをvi、およびEscに設定して過去のコマンドを取得する方法Ctrl+ KまたはCtrl+L


1

vimのショートカットを使用してコマンドラインを簡単にナビゲートおよび編集できます。たとえば、1つの単語にすばやく移動したり、単語を削除したりできます。

あなたが行の末尾に移動する必要があるときに、デフォルトのショートカットでは、あなたがする必要があるCtrl+ eとのに対し、set -o viあなただけのヒット$vimの中でのように、。


1

おそらくパーティーに遅れましたが、私にとっては、viモードを使用することは、インタラクティブスクリプトを作成するときのことです。たとえば、

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

非常に複雑になる可能性のある非常に単純な例..を使用ESCkvすると、viセッションに移動し、そこでスクリプトを変更して実行できます:wq


1
これは、viモードでbashを使用する良い例かもしれませんが、bashコードの悪い例です。(1)からの出力をls他の種類の処理への入力として使用するのは悪い考えです。(2)$(…)コマンド置換の`…`構文は、構文よりも読みやすいと広く考えられています。(3)正当な理由がない限り、シェル変数を常に引用する必要があり、自分が何をしているのかを確実に知っている必要があります。
G-Manは「Reinstate Monica」と言います
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.