web-dev-qa-db-ja.com

Vimが貼り付けたコードを誤ってインデントするのはなぜですか?

Vimでこのスクリプトを貼り付けた場合:

#!/bin/sh
VAR=1
while ((VAR <  10))
    do
        echo "VAR1 is now $VAR"
        ((VAR = VAR +2))
    done
    echo "finish"

私はこれらの奇妙な結果を得ます:

#!/bin/sh
#VAR=1
#while ((VAR <  10))
#       do
#                       echo "VAR1 is now $VAR"
#                                       ((VAR = VAR +2))
#                                               done
#                                                       echo "finish"
#                                                       

ハッシュ記号(#)とタブが表示されています。どうして?

108
elbarna

2つの理由があります。

自動インデントが有効になっているときにvimに貼り付けるには、次のように入力して 貼り付けモード に変更する必要があります。

:set paste

次に、挿入モードに変更してコードを貼り付けることができます。貼り付けが完了したら、次のように入力します。

:set nopaste

貼り付けモードをオフにします。これは一般的で頻繁なアクションなので、vimは貼り付けモードの切り替えを提供します。

set pastetoggle=<F2>

F2を任意のキーに変更でき、貼り付けのオンとオフを簡単に切り替えることができます。


コメントの自動挿入をオフにするには、次の行を vimrc に追加します。

augroup auto_comment
    au!
    au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END

vimには、システムクリップボードからテキストを貼り付けるための 貼り付けレジスタ も用意されています。システムに応じて、"*pまたは"+pを使用できます。 OSXやWindowsなど、X11がないシステムでは、*レジスタを使用する必要があります。 LinuxのようなX11システムでは、両方を使用できます。

さらに読む

131
cuonglm

Vimペーストを使用します。あなたが欲しいのは、クリップボードのバッファにあるものを貼り付けることです "+p

これは+を貼り付けます。

Linuxを使用している場合は、*はX /ミドルクリックバッファー(最後に選択されたテキスト)です。

その後、vimはそれがペーストであることを認識します。

それ以外の場合、vimは、貼り付けられるキーを入力したと見なし、貼り付けの最後まで(コピーされたインデントの上に)独自の自動インデントを行います。

これがSSH経由で機能するためのメモとして、クリップボードを共有するオプションを設定する必要があります-Y

見る man ssh 詳細については。

36
exussum

自動インデントがオンになっているためタブが挿入されました。自動インデント(:set noai)をターミナルに貼り付ける前に。

コメント行は自動コメントによって生成され、オフにすると無効にできます。

これらの代わりに、トグルを使用して目的の動作を取得する必要があります:set paste、フォーマットされたコードを貼り付け、:set nopaste通常の動作に戻します。

8
casey