75

この質問はVim: execute current file?に似ています。、しかし、現在のファイルを実行する代わりに、現在の行のみを実行したい。

これは可能ですか?

理想的には、外殻に副作用をもたらす可能性のあるソリューションを探しています。

たとえば、次の行があるとします。

alias foo=bar

Vim でコマンドを実行した後、シェルを で起動すると:shエイリアスが使用可能になりますが、使用fooをやめるとエイリアスが使用できなくなります。vim:q

4

7 に答える 7

132

確かに、現在のファイルの内容を別のプログラムの標準入力に「書き込む」ことができます。

:.w !bash

ここ.( wの前の部分) は、記述している行の範囲を指し.、現在の行のみです。次に、!bashそれらの行を Bash に書き込むために使用します。

于 2013-11-09T22:36:37.570 に答える
20

カーソルをその行に移動し、通常モードで次を押します。

!!bash<cr>
于 2013-11-09T22:39:17.133 に答える
7

私がコメントできる場合、これはコメントになる可能性があります。

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

これはExecute current line in Bash from Vimに触発されました。

于 2016-10-12T15:28:07.640 に答える
0

端末で次のコマンドを実行することを検討してください。

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

于 2019-02-02T17:50:36.113 に答える