vimscriptのビジュアルセレクションをどのように調達できますか?


11

vimrcを配置する前にテストしたいvimscriptの行が数行ある場合、視覚的に選択してソースを指定できますか?

私が試してみました

  • 視覚的な選択vを行い、次に選択を行うためのモーションなどを行います。
  • :'<,'>so

しかしvimはエラーを出します

範囲は許可されていません

また

:'<,'>w | so

与える

使用する !部分的なバッファを書き込む

視覚的に選択されたvimscriptを入手するにはどうすればよいですか?

回答:


11

コマンドラインでヒットして<C-u>から@*、入力して入力します。

<C-u>'<,'>テキストが視覚的に選択されている場合、自動的に挿入された視覚範囲を削除します。

:@**現在視覚的に選択されているものをすべて含むレジスターの内容を実行します。

選択/強調表示されたテキストがWebブラウザー(firefox、chromeなど)にある場合*でも機能します。レジスターを使用すると、vimで直接アクセスできます。


テキストがvimバッファーで選択されている場合、別の解決策は、名前を付けたレジスター(たとえば、と入力しレジスター)にコピーすること"ayです。

次に、コマンドラインで「:」<C-r>aと入力して入力します。
Ctrl+ rは、文字で表される一種のプロンプトを表示します"(詳細については、を:h c_Ctrl-r参照)。
この新しいプロンプトで、レジスタの名前を指定すると、その内容がコマンドラインに挿入され、実行前に編集できるようになります。


あなたはレジスタを指定せずに、いくつかのテキストをコピーする場合のほかに、それは無名レジスタからアクセスできるようになります

したがって、ファイルにvimscriptの行があり、それをすばやくソースしたい場合は、を使用してコピーYし、コマンドラインで::<C-r>"を入力して、Enter キーを押します。

最後に、この最後のソリューションを使用する場合、注意しなければならない問題があります。
このようなコマンドラインで奇妙な文字が表示された場合^M、それはキャリッジリターンのキャレット表記です。削除する必要があります。削除しないと、おそらくエラーが発生します。

要約すると、あなた:

  1. vimscriptの行をコピーして Y
  2. コマンドモードに切り替え :
  3. ヒット<C-r>してレジスタプロンプトに入ります
  4. "名前のないレジスタを呼び出すタイプ
  5. ^M文字を削除するにはバックスペースを押します
  6. Enterキーを押します。

1
甘い!:Dはうまく動作します-これまでに遭遇したことはありません@*でした、ありがとう!
the_velour_fog

お役に立てて嬉しいです。回答を編集して別の解決策を提案しました。
saginaw 2015年

1
いいもの、私は: <C-r>a 実際にそれがうまく機能することについてあなたの提案を試してみ ました:) vimは^M's as line returns-を読み取り、それぞれを独自の個別の行/コマンドとして実行したと思いますか?
the_velour_fog

正直なところ、私にはわかりません。通常、この文字を削除しないとエラーになります。エラーなしで問題なく機能したことをうれしく思います。たぶん、この件についてもっと知識のある人がvimがその種の特殊文字をどのように扱うかを説明してくれるでしょう。
saginaw 2015年

2

私は実際には少し違ったやり方でやっています、私はvimrcで編集を行い、それを書くたびに再ソースします。(私はvimrcファイルのカスケードセットを持っているので、これらのファイルのいずれかを変更できます。)

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif

2

私の他の答えよりも直接質問に、このようにマッピングを定義できます(nnoremap選択しないvnoremap場合は、現在の行を実行するだけです。ビジュアルモードがアクティブな場合)。

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

どちらの場合も、「現在の行」は:executedなので、ビジュアルバージョンでは:execute、ビジュアル選択を介して次々と行を表示します。

別の回答で述べたように<C-u>:は、入力時にコマンドラインにポップアップ表示される範囲指定を削除します。|そう、彼らはの終わりと解釈しているので、文字をエスケープする必要があるvnoremapコマンド。

これは、一部の脱出体操を取り除く関数に変換することもできますが、現時点では大きな勝利とは思えません。基本的には、vnoremapが複数行に展開さcallれ、[nv]マッピングモードに応じて範囲が指定されているかどうかがわかります。


ああ、ビジュアルモードマッピングは行全体を実行するため、ブロック単位または文字単位の場合、行内の開始点と終了点は無視されます。
ダッシュトムバン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.