この質問はVim: execute current file?に似ています。、しかし、現在のファイルを実行する代わりに、現在の行のみを実行したい。
これは可能ですか?
理想的には、外殻に副作用をもたらす可能性のあるソリューションを探しています。
たとえば、次の行があるとします。
alias foo=bar
Vim でコマンドを実行した後、シェルを で起動すると:sh
エイリアスが使用可能になりますが、使用foo
をやめるとエイリアスが使用できなくなります。vim
:q
この質問はVim: execute current file?に似ています。、しかし、現在のファイルを実行する代わりに、現在の行のみを実行したい。
これは可能ですか?
理想的には、外殻に副作用をもたらす可能性のあるソリューションを探しています。
たとえば、次の行があるとします。
alias foo=bar
Vim でコマンドを実行した後、シェルを で起動すると:sh
エイリアスが使用可能になりますが、使用foo
をやめるとエイリアスが使用できなくなります。vim
:q
確かに、現在のファイルの内容を別のプログラムの標準入力に「書き込む」ことができます。
:.w !bash
ここ.
( wの前の部分) は、記述している行の範囲を指し.
、現在の行のみです。次に、!bash
それらの行を Bash に書き込むために使用します。
カーソルをその行に移動し、通常モードで次を押します。
!!bash<cr>
私がコメントできる場合、これはコメントになる可能性があります。
Vim の現在のバッファーの行を外部コマンドにリダイレクト/パイプすることについて、Daan Bakker の素晴らしい回答に触発されて、Python スクリプトの実行に関する質問 (現在のバッファー) について、ここで回答 ( Save and run at the same time in Vim )を書きました。 .
バッファ全体を実行する以外に、外部コマンドを介して行の範囲を実行する方法が示されています。
時間を節約するために、以下にコピーします。
#####################
Vim では、現在のバッファーの任意の範囲を外部コマンド (「bash」、「python」、または独自の Python スクリプト) にリダイレクトするだけで済みます。
# Redirect the whole buffer to 'python'
:%w !python
現在のバッファに次の 2 行が含まれているとします。
import numpy as np
print np.arange(12).reshape(3,4)
:%w !python
保存されているかどうかに関係なく、実行されます。そして、端末で以下のようなものを印刷します。
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
もちろん、いくつかのキーマップなど、永続的なものを作成することもできます。
nnoremap <F8> :.w !python<CR>
vnoremap <F8> :w !python<CR>
最初のものは現在の行を実行します。2 つ目は、Python インタープリターを介して視覚的な選択を実行します。
#!! Be careful, in Vim ':w!python' and ':.w !python' are very different, the
first writes (creates or overwrites) a file named 'python' with thew contents of
the current buffer. The second redirects the selected cmdline range (here dot .,
which mean current line) to an external command (here 'python').
コマンドラインの範囲については、を参照してください。
:h cmdline-ranges
以下のものではなく、通常のコマンドに関するものであり、cmdlineのものではありません。
:h command-range
端末で次のコマンドを実行することを検討してください。
seq 0 10 | xargs printf "%02x "
期待される出力は、
00 01 02 03 04 05 06 07 08 09 0a
上記のコマンドがファイルに記述されているとします。このコマンドを実行するには、このそれぞれの出力をそのファイルに戻します。このマッピングを自分の .vimrc に追加できます。
nmap <leader>E :exec 'r!'.getline('.')<CR>
上記の行を実行するには、%
次のように ' ' のエスケープ文字を追加して記述する必要があることに注意してください。
seq 0 10 | xargs printf "\%02x "
ファイルのこの行に移動して、 を押し<leader>E
ます。私の場合、<leader>
にマッピングされている,
ため、押します,E