vimからbashスクリプトを実行する


21

私はbashスクリプトにvimを使用しています。問題は、新しいファイルを作成し、実行可能にし、実行してから削除したくないことです。1回だけ使用されるスクリプトを意味します。

たとえば、vimを開いて次のように入力します。

#!/bin/bash

ll | while read line
do
    echo $line
done

このファイルは保存せず、bashスクリプトを単純化するためにvimを使用しています。!vim 経由でbashコマンドを実行できることを知っています。しかし、バッファ内にあるすべてを実行するのはどうでしょうか?


4
Vimで現在のコマンドラインを編集し<C-x><C-e>て、書き込み時に実行できることを知っていますか?
ロメインル

このオプションを使用してbashを実行すると、viでコマンドラインを編集するset -o viことができますEsc-v。次にEsc-:wq実行します。
roblogic

回答:


35

これについては、stack-overflowについてかなり広範な回答を書きました。基本的な考え方は、書き込みコマンドは保存ではなく書き込みに関するものなので、バッファ内のテキストをpythonやbashなどの外部プログラムに書き込むことができるということです。あなたの場合、あなたは次のようなことをしたいと思うでしょう:

:w !bash

または

:w !sh

これらのコマンドは、文字通り、バッファー内のテキストを、指定したプログラムに直接書き込むだけです!。これは、ファイルを保存する必要がないため便利です。もちろん、次のようなこともできます:

:w | !bash %

ファイルを保存してから、bashスクリプトとして実行します。どちらを選択してもかまいません。


この方法でオプションに引数を提供する方法はありますか?試してみまし:w !bash -a testたが、「バイナリファイルを実行できません」
-St.Antario

@ St.Antarioうーん。何らかの方法があるはずですが、私のbashはかなり錆びています(主にWindowsを使用しています)。空のtestファイルでcygwinでそれを試すと、うまく動作します。コマンドは何をすることになっていて、何をtest含めるべきですか?
DJMcMayhem

私の実際のケースはかなり複雑なので、渡された引数を出力するだけにします。ところで、何をtest 含めるべきなのでしょうか?testはの単なる引数-aです。
-St.Antario

1
@ St.Antarioああ、わかりました。testファイルだと思っていました。どうすればいいかよくわかりません。複雑なものを試している場合は、ファイルに保存する方が良いかもしれません。詳細を提供できるように、別の質問として尋ねる価値があるかもしれません。これはおそらくものために良い質問だろうUnixおよびLinux
DJMcMayhem

4

シナリオ:bashシェルで作業しています。まず、ローカル編集モードがviであることを確認します。

$ set -o vi

さて、次のような長いコマンドで作業していることに気付いたら、Esc+を押してくださいv

$ fjhwfq this is my long command

これにより、コマンドが一時viセッションにロードされます。これで、必要に応じて編集したり、別のコマンドを追加したりできます...

fjhwfq some long command
ls -l

編集が終了したら、次のように入力するEsc :wqとコマンドが実行されます。

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env

3
Escキーのない新しい
Macbook

1
新しいMacBookにはEscキーがありません!?その場合、彼らはどのようにVimを使用できますか?
ウブロ

1
今、私はそれを試してみた、ブツtouchbar新しいMacBookはありません示しEsc、端末でVimを実行しているキーを押します。
-roblogic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.