web-dev-qa-db-ja.com

「.w」評価の結果をVimの行末に挿入するにはどうすればよいですか?

VimでJavascript(または他のコード)の行を評価し、その結果を行末のコメントに表示できるようにしたいと思います。

たとえば、次のようなファイルがある場合:

console.log(4 + 5);

カーソルがその行にあり、コマンド:.w !node -eを使用すると、結果「9」が下のバッファーに表示されます。 :. !node -eを使用すると、行全体が結果9に置き換えられます。

代わりに、次のように、コメントの行末に結果を追加するコマンドを作成するにはどうすればよいですか。

console.log(4 + 5);    // 9

また、:rを使用すると、次の行に渡されたものがすべて出力されることにも注意してください。 r !echo "This is text."は、カーソルの下の行に「This is text.」を挿入します。ただし、次のようなコマンド...

:r ". !node -e"

...コマンドではなくファイルとして". !node -e"を読み取ろうとします。私はこの振る舞いを本当に理解していませんが、それは物事を少し直感的にしません。

最終結果は、Atomテキストエディターが水素カーネルを処理する方法をいくらか思い出させ、コード評価の結果がコードの左側に表示されるようにしたいと思います。計画は次のとおりです。キーバインディング(<C-Enter>または<F5>)を作成して、現在の行を自動評価し、結果を表示します。

5

行が次のようになっている場合:4 + 5 =次のようなものを使用できます:

:map "_ay/= ^ Mo ^ [!! echo ^ Ra\| bc ^ MkJ
  1. _ ...............実際の行の先頭にジャンプします
  2. "ay/= ^ M ... =をバッファにヤンクする
  3. o ^ [ ...........新しい空の行を作成します
  4. !! ..............シェルプログラムを起動して、この新しい行に結果を書き込みます
  5. ^ Ra ..........バッファaの内容をコマンドに挿入します: エコー^ Ra\| bc ^ M
  6. k ..............ペビウスラインに移動
  7. [〜#〜] j [〜#〜] ..............次の行(結果)をaktual行に結合します
  8. xとの結合から空白を削除したい場合があります

これがあなたの姿だといいのですが。

3
Horst

Horstの提案のおかげで、「評価」コマンドラインオプションがある任意の言語でVimにこれを実行させる方法を解析することができました。 JavaScriptの場合、私がまとめたコマンドは次のとおりです。

imap <F5> ^[_"ay$o//^[kJo^[!!node -e "^Ra"^MkJi
nmap <F5> _"ay$o//^[kJo^[!!node -e "^Ra"^MkJ

内訳について:

  1. INSERTモードのマッピングの場合、エスケープ(^[)は通常モードに戻ります。
  2. _"ay$は行全体をレジスタaに配置します。
  3. o//^[kJはコメントに「//」を追加します。
  4. o^[は別の新しい行を開始します。
  5. !!node -e "^Ra"^MはNode.jsを介してレジスタ(行)を実行し、現在の行に結果を返します。
  6. 最後に、kJは、この新しい行を最初の行に戻し、コメントにします。
  7. INSERTモードの場合、iはモードをNORMALからINSERTに戻します。)

Pythonについても、いくつかの小さな編集を加えるだけで同じことができます。

imap <F5> ^[_"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJi
nmap <F5> _"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJ

このため、//コメントはPythonの#に置き換えられます。さらに、mathモジュールを自動的にインポートします。これは、そのようにすばやく計算するのに非常に役立つためです。

これらの各マッピングをそれぞれの~/.vim/ftplugin/<language>.vimファイルに配置し、set ftplugin on.vimrcに配置することをお勧めします。これにより、使用している言語に基づいてマッピングを変更できます。

Vimでインタラクティブにコードを実行したい人は誰でもこれを見つけて、おそらくそれを改善することさえできることを願っています。 Ahuge「ありがとう!」この質問に答えてこの小さなプロジェクトをキックスタートするために Horst に行きます!

2