vimへの貼り付けを高速化できますか?


12

HTMLの一部をWebページからコピーして、ファイルに保存したいと考えました。そのためvim に、コマンドラインで(新しい)ファイル名を指定してターミナルウィンドウで新しいセッションを開始し、ヒットiして挿入モードにした後、CtrlShift+ Vを押し[-- INSERT --]て、下部に表示されて待機していました...

vim私は、一瞬の中に現れたテキストを(貼り付けAccessoiriesメニュー→アプリケーションから「テキストエディタ」を開いて新しい名前で保存し、閉じられ、Vimのセッションそれを殺し、数秒後に無反応でした1.5分後でもまだ行われていませんでした。テキストの量は3200行で186Kであり、過度に長くはありませんでした。

これらの種類の挿入を高速化する方法はありますvimか、および/または、これが他の恐ろしいマウス指向のテキストエディターの使用と比較して非常に遅い理由の説明はありますか?

(によると、%CPU topは5%を超えていませんが、システムにいくつかのプロセッサが空いているため、ファイルから同じテキストを読み取るときに存在しない、I / Oバウンドの問題である可能性があります)

バージョン情報:
Ubuntu 12.04
Vim:7.3、Ubuntu 12.04提供のパッチを
適用bash:4.2.25
gnome-terminal:3.4.1.1


1
私はそれが遅いと思います入力を解析してフォーマットする必要があるなどです。これを行うためのオプションはわかりませんが、一時的にその機能を無効vimにして貼り付けることができると仮定します再度有効にします。また、この:set paste機能を使用して、改善されるかどうかを確認してください。:help pasteそれがどのようにvim区別しない白黒入力と貼り付けを説明するそれを見てください。
slm

私はvi(@ l0b0が提案した方法を保存した後)読み込み時にファイルを解析しようとすることも期待しています。しかし、それは速く機能します。
Anthon 2014

確かに、しかし、それは既に解析されているすべてのものと、貼り付けられている新しい文字を再解析する必要があると想像しています。これは、ファイルを編集するときにもある程度起こっているようです。
slm

これ:set pasteは実際には違いがないようです(私はストップウォッチを使用していません。壁時計だけを使用しています)。
Anthon 2014

OK、ただの考えでした...
slm

回答:


14

大量のクリップボードテキストをすばやくファイルに保存するには、を実行しcat > file.txtて内容を貼り付け、Ctrl- を押しdます。

xselがインストールされている場合は:r !xsel、Vimに「プライマリ」(別名「マウス」)の選択:r !xsel -bを挿入するか、「クリップボード」(Ctrl- c)バッファを挿入できます。xsel >file.txtまたはを使用して、選択をファイルに直接保存することもできますxsel -b >file.txt。これにより、個別の貼り付け+ EOFアクションの必要がなくなり、端末でコピーバッファー全体を印刷する必要がなくなります。

xsel以外にxclipがある場合、対応するコマンドはxclip -out、1次選択xclip -out -selection clipboard用またはクリップボードバッファー用です。


1
おかげで、それは少なくともマウスに戻ることなく動作し、ファイルをvimに挿入する(たとえば、空のファイルで開始しない場合)のは十分高速です。
Anthon 2014

これをctrl + shift + vにバインドできなかった理由がわかりません。これらすべてにまったく意味がありません。
mchid 2016年

2

これはディスクへのバッファのフラッシュの問題です。Vimはあなたの仕事を安全に保つことを試みて、あなたが毎秒数千文字をタイプできると仮定しません。:help swap-fileバッファリングの詳細については、こちらをお読みください。あなたの問題の解決策はこれです:

次のいずれかでvimのswapfileをオフにします。

vim -n <your file>

または貼り付け前のvim内から:

:set noswapfile

詳細については:help swapfile、を参照してください。

別のオプションは、単にスワップファイルのディスクへの同期をオフにすることですが:set swapsync=、このオプションを使用すると、元に戻すのに多くのキーストロークが必要になり、私は怠惰です。:)

スワップをオフにしても、通常の操作では安全ではありません。貼り付け直後に、:set swapfileまたは:set swapsync=fsyncを使用して通常の動作に戻します(技術的には、通常の動作はfsyncではなく同期であった可能性があります。このルートに移動するかどうか事前に確認してください)。:set swapsync?


1
これは私のために物事をスピードアップしませんでした...
エリグ

1

あなたが持っている場合はxterm_clipboard機能は、使用することができます*し、+レジスタを。これらのレジスタは、X11プライマリ選択バッファー、およびクリップボード(それぞれ)とインターフェースします。

したがって、CTRL+ を介して何かをコピーした場合はc、それをvimにで貼り付けることができます"+p

コピーせずに単に強調表示しただけの場合は、で貼り付けることができます"*p
を実行して、*バッファをデフォルトのバッファにすることもできます:set clipboard=unnamed。次に、レジスタを指定していないヤンク(y)、ペースト(p)などは、レジスタを使用し*ます。Vim 7.3.74も追加されましたclipboard=unnamedplus。これは+デフォルトでレジスターを使用します。

また、次の例のように、ヤンクすることで、プライマリセレクションとクリップボードバッファにコピーすることもできます"+yy

 

前述のとおり、これらの機能にはすべて機能が必要xterm_clipboardです。:versionvim内またはvim --versionシェルからこの機能があるかどうかを確認し、を探します+xterm_clipboard。と表示されている場合は-xterm_clipboard、それがないため、vimを再コンパイルする必要があります。


その機能はありません。vimがxtermで実行されていない場合でも、ヘルプを再コンパイルしますか?(私はgnome-terminalを使用しています)。
Anthon 2014

@Anthon GUI VIMを使用している場合は、レジスタも有効になっていると思います。xterm_clipboard端末からvimを実行している場合のみです。
Patrick 14

これはテキストのみで、GUI VIMはありませんが、からは実行されませんxterm
Anthon 2014

ああ、ごめんなさい。はいxterm_clipboard、xtermだけでなく、すべての端末エミュレータに適用されます。私自身はurxvtを使用しています。
Patrick 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.