Mac OS Xのターミナルウィンドウにコードをvimに貼り付けると、各行がインデントされます。行ごとにインデントが追加されるため、テキストは次のようになります...
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum."
私の現在の回避策は、正しい形式を保持するテキストメイトテキストエディターに最初にテキストを貼り付けることです。次に、そのファイルを保存し、vimで開きます。次に、vim yankを使用して貼り付けます。
。vimrcに、この動作を変更できる設定がありますか?または、これは端末の問題ですか?
Vim内:
:set paste
Vimを貼り付けモードにします。これは、1つのウィンドウからテキストをカットまたはコピーしてVimに貼り付ける場合に便利です。これにより、予期しない影響が回避されます。
更新:Vim 8には、ブラケットペーストモードのネイティブサポートが含まれています。デフォルトで有効になっています。 Vimのxterm-bracketed-paste
ヘルプトピック。ユーザーはこれをサポートするためにVimを設定するために何もする必要がなくなりました。
Mac OS X Lion 10.7以降、ターミナルは「ブラケットペーストモード」をサポートします。これにより、ターミナルエミュレーターは、ユーザーがテキストを貼り付けたときにttyに接続されているプログラムに通知できるため、プログラムは編集コマンドとして解釈しません。それをサポートするプログラムは、このモードを有効にするために端末にエスケープシーケンスを送信します。このモードでは、端末は貼り付けられたテキストを開始と終了を識別するエスケープシーケンスのペアで囲みます。
Vimでこれを有効にするには、〜/ .vimrcファイルに次のコードを追加します。
if &term =~ "xterm.*"
let &t_ti = &t_ti . "\e[?2004h"
let &t_te = "\e[?2004l" . &t_te
function! XTermPasteBegin(ret)
set pastetoggle=<Esc>[201~
set paste
return a:ret
endfunction
map <expr> <Esc>[200~ XTermPasteBegin("i")
imap <expr> <Esc>[200~ XTermPasteBegin("")
vmap <expr> <Esc>[200~ XTermPasteBegin("c")
cmap <Esc>[200~ <nop>
cmap <Esc>[201~ <nop>
endif
これにより、Vimが端末を代替画面†(t_ti、t_te)に切り替えたときに、ブラケット貼り付けモードを有効または無効にします(ESC [?2004 h、ESC [?2004 l)。貼り付けの開始を示すエスケープシーケンス(ESC [200〜)を受信すると、貼り付けモードを有効にし(貼り付けを設定)、必要に応じて挿入モードに切り替えます( "i")。一致する貼り付け終了マーカー(ESC [201〜)を受信すると、貼り付けモード(pastetoggle)を無効にし、挿入モードのままになります。 cmap
コマンドは、エスケープシーケンスを無視し、貼り付けられたテキストをそのまま受け入れるようにVimコマンドラインを調整します。
これは、$ TERM値が「xterm…」で始まる場合にのみ、括弧付き貼り付けモードを有効にすることに注意してください。 $ TERMを別の値に設定している場合は、そのテストを修正して$ TERM値を含めることができます。または、厳密に必要ではないため、テストを完全に省略することもできます。他の端末タイプと互換性がない可能性のあることをしないように注意するだけです。
ターミナルでは、これはすべてのさまざまな貼り付けコマンドとドラッグアンドドロップで機能します。
†ターミナルには、メイン画面と「代替」画面があります。各画面には、独自のコンテンツと状態があります。代替画面のテキストは、スクロールバックログにスクロールアップしません。通常、画面全体の制御を引き継ぐプログラムで使用されるため、「フルスクリーン」プログラムと呼ばれます。これには、vim、emacs、less、topなどが含まれます。
他の回答に加えて、貼り付けモードをすばやく切り替える方法が必要な場合は、
set pastetoggle=<F2>
あなたの.vimrcに。 F2(または任意のキー)を押して、貼り付けモードを切り替えることができます。
これを行う別の方法は、システムのクリップボードが適切に設定されていることを前提としています
"+p
これにより、システムのクリップボードから貼り付けられます。
ヴィムで
:セットペースト
無効にしたいとき
:set nopaste
ターミナル内で作業する場合、 vim-bracketed-paste vimプラグインは、ペーストの前後にキーストロークを必要とせずに、ペーストを自動的に処理します。
これは、Terminal、iTerm2、およびブラケットペーストモードをサポートする「最新の」x-term互換端末で動作します。追加のボーナスとして、tmuxセッションでも機能します。 Linuxサーバーに接続し、tmuxを使用するMac上のiTerm2で正常に使用しています。
プラグインは基本的に、@ Chris Pageが answer にリストした機能のパッケージバージョンです。