コマンドラインから新しいバッファのコンテンツを指定するにはどうすればよいですか?


7

ターミナルで指定されたコンテンツでバッファを開く、つまりファイルに保存されないようにVimを呼び出す方法はありますか?

たとえば、実行vimしてそれがfoo, bar, baz and qux書き込まれた状態でバッファを開くようにしたいと思います。

これを行うオプションはありますか?

回答:


11

このようなことを試しましたか?

$ echo "foo, bar, baz, and qux" | vim -

それとも?

$ vim -c "put='foo, bar, baz, and qux'"

ああ、甘い!試したvim < echo "test"が成功しなかった。知らなかったvim -!そして+/ -cも役に立ちます。ありがとうございました。
ゴンサロリベイロ

3

この解決策はromainlの解決策から完全に発想を得ていますが(彼のおかげです)、複数の文字列で複数のバッファを開くことができます。

次の行を.zshrc(または.bashrcbash関数を定義する関連ファイルに)追加します

function mvim {
    CMD="vim "
    for string in "$@"
    do
        CMD=$CMD"-c \"enew | put='"$string"'\" "
    done
    CMD=$CMD"-c \"bufdo 1d\""

    eval $CMD
}

.zshrcファイルを取得した後、次の関数を呼び出すことができます。

mvim "foo bar" "baz" "and quz"

これは、それぞれが1つの文字列を含む3つのバッファを持つvimインスタンスを開きます。

引数を指定しない場合、通常のvimインスタンスが開始されます。1つの引数が空の文字列の場合、空のバッファが作成されます。

編集私は理解できない理由で、各バッファーの先頭に空の行が作成されるので、行を追加したことに気付きました

CMD=$CMD"-c \"bufdo 1d\""

すべてのバッファでこの空の行を取り除くため。


1
それは興味深いスクリプトです。役に立つかもしれません。ありがとうございます:)
ゴンサロリベイロ2015

3

私は最近、クリップボードのコンテンツをvimの新しいバッファーに入れる方法を探しました。私はそれをここで共有する価値があると思います:

vim -c "put! *"

更新:
これは、現在の行の前のputレジスタからのテキストになります。*!

レジスタは、ウィンドウでクリップボードを指します。*+

Linux +では、クリップボードのコンテンツがあり*、選択したテキストが含まれています。


argcが0の場合でも、自動的に行うことができるのvimrcで
ダッシュ-トム・バン

たぶん、あなたは参照してください可能性があり:help quotestar:help quoteplus、このコマンドは動作しますなぜこれらのレジスタは理解して知らない人を助けるためにあなたの答えインチ また、GNU / Linux上の存在との間の差である*+、Windows上で、彼らは同等であるが、。
ゴンサロリベイロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.