2016-10-16 20 views
3

ビジュアルブロックを外部コマンドに送信するにはどうすればよいですか?VIM:ビジュアルブロックを外部コマンドに送信

ブロックをCtrl-qで選択してから、それを押します。 program_nameしかし、vimは選択したテキストブロックではなく、行全体を送信します。

私は常に外部コマンドに行全体を送っていますが、この問題のromainlの答えの機能を使用していることを行うことができますVimのWindowsの10で

+2

も含めhttp://vi.stackexchange.com/questions/7388/replace-selection-with-output-of-external-command参照してくださいトップの答えにコメント – Sundeep

答えて

2

をgvimをを使用しています:

Sending visual selection to external program without affecting the buffer

    :外部プログラムに非行単位の選択を渡す は

    次のように行われています

  • バックアップレジスタ
  • の内容は、その中で選択をヤンク
  • レジスタ(システムに登録し、その内容を渡す)と出力結果
  • レジスタに

を復元ここでは、あります関数内:

あなたは、このようなマッピングで使用することができます
function! VisualCountWords() range 
    let n = @n 
    silent! normal gv"ny 
    echo "Word count:" . system("echo '" . @n . "' | wc -w") 
    let @n = n 
    " bonus: restores the visual selection 
    normal! gv 
endfunction 

xnoremap <F6> :call VisualCountWords()<CR>

+0

ありがとう。残念なことにデザインのために、私は自分がしたいことをすることができなくなるでしょう。私は、外部のコマンドやスクリプトの柔軟性を持ってテキストブロックをセンシングする能力が必要です。しかたがない。 – user2001487

2

ブロックワイズビジュアルモードがVimの拡張であるのに対し、実施例のコマンドは、ラインベースです。これは、フィーチャの不一致を説明するものです。

vis.vim pluginには、実際に選択したブロックをExコマンドに送信できるようにする:Bコマンドがあります。また:!で動作しますので、あなたがこのようなことを行うことができます。

:'<,'>B !tr 'a-z' 'A-Z' 
+0

ありがとう!これはまさに私が探しているものです! – user2001487

+0

私はあまりにも早く話しました。このプラグインは私が探しているものに近いですが、ブロック選択内のすべての行を並べ替える必要があります。私が使用している外部ソートコマンドでは、バージョン番号(ソート-V)でソートすることができます。 Vissortに似ていますが、より柔軟性があります。 – user2001487

+0

選択したテキストを並べ替えるだけで(行の前と後をそのまま残しておく)、vis.vimが解決策です。行全体を並べ替えるのではなく、選択した列に基づいて並べ替えるには、 ':!sort ...'を使いますが、 '--key = ...'で)フィールドを指定してください。 –

関連する問題