VimとPythonの間で多くの時間を費やしています。 Python=からVimへ、またはその逆に手動でコピーして貼り付けるのは遅すぎると思います。良い壊れた例は次のとおりです。
%!python for i in xrange(25); 6 * iを印刷\ n
Vimでこのような微調整をどうやって行うことができますか? [解決済み]
[説明]シーケンスの印刷、算術演算など、Vimに必要なもの-Vimでは実行できないこと。
[?]誰かがこの点について詳しく説明できますか:「スクリプトはstdinから読み取って、指定された行を直接操作できます(。、%、...)。」
[詳細説明]
「Hello」を4、5、6、7行目に出力したい場合、何が問題なのでしょうか。
:4-7!python -c "print 'hello'"
ドット。現在の行を変更します。複数の行7、32、99に印刷できますか?
:7,32,99!python -c "print 'hello'"
明らかに機能していません。どうやって?
Vimウィンドウのいずれかで、次のように入力します。
for x in range(1,10):
print '-> %d' % x
両方の行を視覚的に選択し(Vで視覚モードを開始)、次のように入力します。
:!python
ビジュアルモードで「:」を押したので、次のようになります。
:'<,'>!python
Enterキーを押すと、選択内容がprint
ステートメントの出力に置き換えられます。あなたはそれを簡単にマッピングに変えることができます:
:vnoremap <f5> :!python<CR>
誰かがこの点について詳しく説明できますか:「スクリプトはstdinから読み取って、指定された行(。、%、...)を直接操作できます。」
一般的な用途の1つは、シェルで使用可能な「sort」コマンドを使用してテキスト行をソートすることです。たとえば、次のコマンドを使用してファイル全体を並べ替えることができます。
:%!sort
または、ビジュアルモードで行を選択してから次のように入力して、数行だけを並べ替えることもできます。
:!sort
次のコマンドを使用して、5行目から10行目をソートできます。
:5,10!sort
テキストの行を反転させる独自のコマンドラインスクリプトを書くことができます(その方法がわかっていると想定)。それはこのように動作します:
bash$ myreverse 'hello world!'
!dlrow olleh
sort
とまったく同じ方法で、vimで開いているファイルの1つに適用できます。
:%!myreverse <- all lines in your file are reversed
あなたの例から、Pythonスクリプトを実行し、スクリプトの出力を現在のVimバッファーに表示したい場合があります。それが正しい場合は、次のようにすることができます。 Vimのコマンドライン:
%!python -c "for i in xrange(25): print 6*i"
-c
オプションをpython
に指定すると、スクリプトを実行できます。ただし、他の一部の言語とは異なり、Pythonは完全なプログラムをすべて1行で記述するのに向いていないため、この手法は非常に短い場合にのみ役立つ場合があります。
おそらくさらに読むために、私はそれらの有用性がわかりません:
pythonスクリプトを新しい[No Name]バッファに書き込んだ場合は、以下を使用できます。
:0,$!python
名前のないバッファーがある場合、 '%'を使用できないため、0、$が必要です。これは、バッファー内の行0から最後の行までのすべての行を意味します。
出力はバッファに書き込まれますが、残念ながら最後には書き込まれません
-c
国旗。例えば:
:.!python -c "print 'hello'"
提供するスクリプトが行選択のフィルターとして機能することはできません。つまり、スクリプトはstdin
から読み取り、指定された行(.
、%
、...)。ただし、最も単純なタスク以上のものはすべて、pythonコマンドを独自のスクリプトファイルに追加することをお勧めします。
pythonコードを実行している場合、コードを実行し、カーソルの出力を読み取ってu
で終了できます。シンプルで迅速です。
:r !python %
u
too-much-php のように、ベースをシンプルに保つため、マッピングとビジュアルモードでの選択よりも気に入っています。
Pythonインタプリタで直接vimの一時バッファを編集できるようにする次のモジュールを書いたところです。
「Hello」を4、5、6、7行目に出力したい場合、何が問題なのでしょうか。
ファイル全体のランダムに選択された場所で何かをしたい場合は、キーストロークを記録して再生するほうがよいでしょう。変更する最初の行に移動し、qz
を押して、レジスタz
への記録を開始します。その行に必要な編集をすべて行い、終了したらもう一度q
を押します。変更する次の行に移動し、@z
を押してマクロを再生します。
python呼び出しをvimをコンパイルせずにpythonインタープリターを使用せずに実行したい場合(これにより、Pythonでプラグインを作成できるようになり、それも必要です。とにかくOmnicompleteの場合)、次のように試すことができます。
:.!python -c "import os; print os.getcwd()"
ドライブ(現在のパス)のどこにいるかがわかります。
空のファイルから数行に番号を付けて、結果を簡単に確認できるようにします。
:.!python -c "for i in range(1,101): print i"
(vimは0ではなく1から行に番号を付けます)これで、100行までのすべての行の各行の番号がわかりました。
次に、小さなスクリプトを現在のパス(上記のように)に入れて実行し、動作を確認します。このばかげたものをコピーして貼り付けましょう。実際には、1行につき1行を出力するスクリプトを実行するのが最も便利ですが、このスクリプトが示すように、そうする必要はありません。
print "hi"
try:
while True:
i=raw_input()
print "this was:",i
except EOFError:
print "bye"
たとえば、次のように呼び出すことができます(「what.py」と呼んでいると想像してください)。
:10,20!python what.py
(ファイル名のタブ補完が機能するため、実際にパスにあることを確認できます)
ご覧のとおり、すべての行が標準入力としてスクリプトに送られます。最初に「hi」を出力し、最後に「さようなら」とその間に、「this was:」に加えて、行ごとに出力します。この方法で、行ごとに処理できます。 1行ずつ処理するよりも複雑な処理を実行できることに注意してください。実際には前の行を検討できます。そのようなものについては、sysをインポートして次のようにします。
import sys
print "hello"
for i in sys.stdin.readlines():
i = i.rstrip("\n") # you can also prevent print from doing \n instead
print "here lyeth",i
print "see you"
お役に立てば幸いです。
あなたが本当に欲しいものは説明されていると思います here 。
Windowsでpythonスクリプトを編集している場合は、次のようにします。
!start python my...
一致するものが見つかるまで、tab
を押して、使用可能なファイル名を順に表示します。
!start python myscript.py
新しいcmd
ウィンドウで実行されます。個人的には!start cmd
そして、そこからPythonを実行します。最終的なエラーメッセージからデバッグする方が簡単だからです。