3.16.2013

How to Turn Off Auto Indent When Pasting in Vim

Vim: ペースト時のオートインデントを無効にする方法 

Vimでコードなどをペーストした時、オートインデント機能の副作用でこのような残念な感じに
なってしまうことがある。

{
  "foo": "FOO",
    "bar": "BAR",
      "foo": "FOO",
        "bar": "BAR",
          "foo": "FOO",
            "bar": "BAR"
            }

 

これを回避するには、

  • :set paste
  • :set noautoindent, :set nosmartindent (:se noai, :se nosi)
  • :a! -> ペースト -> エスケープ

などの方法があるが、いずれもペースト前に一手間かかるのが面倒。

 

.vimrc に以下のようなコードを書けば、ペーストか手入力かを判定し
ペースト時にのみオートインデントを無効にしてくれる。 

if &term =~ "xterm"
    let &t_ti .= "\e[?2004h"
    let &t_te .= "\e[?2004l"
    let &pastetoggle = "\e[201~"

    function XTermPasteBegin(ret)
        set paste
        return a:ret
    endfunction

    noremap   [200~ XTermPasteBegin("0i")
    inoremap   [200~ XTermPasteBegin("")
    cnoremap  [200~
    cnoremap  [201~
endif

詳細は以下を参照。

 

References

クリップボードからの貼り付け時に自動インデントを無効にする
http://ttssh2.sourceforge.jp/manual/ja/usage/tips/vim.html#Bracketed

0 件のコメント:

コメントを投稿