1. ホーム
  2. vim

[解決済み] Vimで外部コマンドにバッファをパイプで接続する

2022-11-22 02:53:16

質問

外部コマンド(メールなど)の標準入力にカレントバッファの内容を送りたいのですが、どうすればいいですか?

Vimのバッファを外部コマンドに送るにはどうすればよいですか?

どのように解決するのですか?

この場合 :w !cmd を使うと、現在のバッファを外部コマンドの標準入力に書き込むことができます。から :help :w_c :

                                                        :w_c :write_c
:[range]w[rite] [++opt] !{cmd}
                        Execute {cmd} with [range] lines as standard input
                        (note the space in front of the '!').  {cmd} is
                        executed like with ":!{cmd}", any '!' is replaced with
                        the previous command :!.

関連するコマンドは :%!cmd で、これは同じことをした後、現在のバッファをコマンドの出力で置き換えます。つまり :%!sort は外部ソートコマンドを呼び出して、現在のバッファを適所にソートします。から :help :range! :

:{range}![!]{filter} [!][arg]                           :range!
                        Filter {range} lines through the external program
                        {filter}.  Vim replaces the optional bangs with the
                        latest given command and appends the optional [arg].
                        Vim saves the output of the filter command in a
                        temporary file and then reads the file into the buffer
                        tempfile.  Vim uses the 'shellredir' option to
                        redirect the filter output to the temporary file.
                        However, if the 'shelltemp' option is off then pipes
                        are used when possible (on Unix).
                        When the 'R' flag is included in 'cpoptions' marks in
                        the filtered lines are deleted, unless the
                        :keepmarks command is used.  Example: 
                                :keepmarks '<,'>!sort
                        When the number of lines after filtering is less than
                        before, marks in the missing lines are deleted anyway.