いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

vimでソースコードを貼り付けた際に変なインデントが入らないように貼り付け (set paste, set nopaste)

概要

よく忘れるので、自分用にメモメモ。

vimで他のエディタとかからソースコードを貼り付けようとして、挿入モードで Ctrl-v でウリャってやると結構な確率でインデントがガタガタになります。場合によっては勝手にコメントされちゃったりします。

例えば、以下のようなソースがあったとして

package main

import (
    "fmt"
)

func main() {
    var (
        done = make(chan struct{})
        ch   = make(chan int)
    )

    go func() {
        defer close(ch)
        for i := 0; i < 10; i++ {
            ch <- i
        }
    }()

    go func() {
        defer close(done)
        for v := range ch {
            fmt.Println(v)
        }
    }()

    <-done
}

これを vim で、挿入モードでCtrl-vで貼り付けると以下のようになります。

クリップボードを連携するように設定している場合は、*レジスタ使って "*p とかするとうまく貼り付け出来るのですが、そうでない場合は以下のように

:set paste

と事前に実行してから、Ctrl-v してみてください。ちゃんと貼り付けできます。

デフォルト値は nopaste ですので、後で元に戻しておきましょう。

:set nopaste

貼り付け時に自動で set paste 状態にしてしまうことも出来るのですが、私個人はあまり設定をイジらない派なので、都度やってます。

参考情報

vim-jp.org


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。