はじめに
今日はいつもと違った毛色の投稿を…。 Vim上での作業をちょくちょくするのですが、コピペでVim上に貼り付ける際に、自動インデントされて凄い面倒な事に時たまなります。 しょっちゅう対応方法を失念してしまうのでメモ。
事象と対応策
例えば、以下は他のサイト様を参考にカスタマイズしたzshの設定ファイルなのですが
# (d) is default on # ------------------------------ # General Settings # ------------------------------ export EDITOR=vim # エディタをvimに設定 export LANG=ja_JP.UTF-8 # 文字コードをUTF-8に設定 export KCODE=u # KCODEにUTF-8を設定 export AUTOFEATURE=true # autotestでfeatureを動かす bindkey -e # キーバインドをemacsモードに設定 #bindkey -v # キーバインドをviモードに設定 setopt no_beep # ビープ音を鳴らさないようにする setopt auto_cd # ディレクトリ名の入力のみで移動する setopt auto_pushd # cd時にディレクトリスタックにpushdする setopt correct # コマンドのスペルを訂正する setopt magic_equal_subst # =以降も補完する(--prefix=/usrなど) setopt prompt_subst # プロンプト定義内で変数置換やコマンド置換を扱う setopt notify # バックグラウンドジョブの状態変化を即時報告する setopt equals # =commandを`which command`と同じ処理にする ### Complement ### autoload -U compinit; compinit # 補完機能を有効にする setopt auto_list # 補完候補を一覧で表示する(d) setopt auto_menu # 補完キー連打で補完候補を順に表示する(d) setopt list_packed # 補完候補をできるだけ詰めて表示する setopt list_types # 補完候補にファイルの種類も表示する bindkey "^[[Z" reverse-menu-complete # Shift-Tabで補完候補を逆順する("\e[Z"でも動作する) ### zstyle ### zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # 補完時に大文字小文字を区別しない zstyle ':completion:*' list-separator '-->' zstyle ':completion:*:default' menu select=2 ### Glob ### setopt extended_glob # グロブ機能を拡張する unsetopt caseglob # ファイルグロブで大文字小文字を区別しない ### History ### HISTFILE=~/.zsh_history # ヒストリを保存するファイル HISTSIZE=10000 # メモリに保存されるヒストリの件数 SAVEHIST=10000 # 保存されるヒストリの件数 setopt bang_hist # !を使ったヒストリ展開を行う(d) setopt extended_history # ヒストリに実行時間も保存する setopt hist_ignore_dups # 直前と同じコマンドはヒストリに追加しない setopt share_history # 他のシェルのヒストリをリアルタイムで共有する setopt hist_reduce_blanks # 余分なスペースを削除してヒストリに保存する # マッチしたコマンドのヒストリを表示できるようにする autoload history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^P" history-beginning-search-backward-end bindkey "^N" history-beginning-search-forward-end # すべてのヒストリを表示する function history-all { history -E 1 } # ------------------------------ # Look And Feel Settings # ------------------------------ ### Ls Color ### # 色の設定 export LSCOLORS=Exfxcxdxbxegedabagacad # 補完時の色の設定 export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30' # ZLS_COLORSとは? export ZLS_COLORS=$LS_COLORS # lsコマンド時、自動で色がつく(ls -Gのようなもの?) export CLICOLOR=true # 補完候補に色を付ける zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} ### Prompt ### # プロンプトに色を付ける autoload -U colors; colors # 一般ユーザ時 tmp_prompt="%{${fg[cyan]}%}%n%# %{${reset_color}%}" tmp_prompt2="%{${fg[cyan]}%}%_> %{${reset_color}%}" tmp_rprompt="%{${fg[green]}%}[%~]%{${reset_color}%}" tmp_sprompt="%{${fg[yellow]}%}%r is correct? [Yes, No, Abort, Edit]:%{${reset_color}%}" # rootユーザ時(太字にし、アンダーバーをつける) if [ ${UID} -eq 0 ]; then tmp_prompt="%B%U${tmp_prompt}%u%b" tmp_prompt2="%B%U${tmp_prompt2}%u%b" tmp_rprompt="%B%U${tmp_rprompt}%u%b" tmp_sprompt="%B%U${tmp_sprompt}%u%b" fi PROMPT=$tmp_prompt # 通常のプロンプト PROMPT2=$tmp_prompt2 # セカンダリのプロンプト(コマンドが2行以上の時に表示される) RPROMPT=$tmp_rprompt # 右側のプロンプト SPROMPT=$tmp_sprompt # スペル訂正用プロンプト # SSHログイン時のプロンプト [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && PROMPT="%{${fg[white]}%}${HOST%%.*} ${PROMPT}" ; ### Title (user@hostname) ### case "${TERM}" in kterm*|xterm*|) precmd() { echo -ne "\033]0;${USER}@${HOST%%.*}\007" } ;; esac # ------------------------------ # Other Settings # ------------------------------ ### RVM ### if [[ -s ~/.rvm/scripts/rvm ]] ; then source ~/.rvm/scripts/rvm ; fi ### Macports ### case "${OSTYPE}" in darwin*) export PATH=/opt/local/bin:/opt/local/sbin:$PATH export MANPATH=/opt/local/share/man:/opt/local/man:$MANPATH ;; esac ### Aliases ### alias r=rails alias v=vim # cdコマンド実行後、lsを実行する function cd() { builtin cd $@ && ls; }
これをvim上で貼り付けようとすると以下の様になっちゃいます。
# (d) is default on # # # ------------------------------ # # General Settings # # ------------------------------ # export EDITOR=vim # エディタをvimに設定 # export LANG=ja_JP.UTF-8 # 文字コードをUTF-8に設定 # export KCODE=u # KCODEにUTF-8を設定 # export AUTOFEATURE=true # autotestでfeatureを動かす # # bindkey -e # キーバインドをemacsモードに設定 # #bindkey -v # キーバインドをviモードに設定 # # setopt no_beep # ビープ音を鳴らさないようにする # setopt auto_cd # ディレクトリ名の入力のみで移動する # setopt auto_pushd # cd時にディレクトリスタックにpushdする # setopt correct # コマンドのスペルを訂正する # setopt magic_equal_subst # =以降も補完する(--prefix=/usrなど) # setopt prompt_subst # プロンプト定義内で変数置換やコマンド置換を扱う # setopt notify # バックグラウンドジョブの状態変化を即時報告する # setopt equals # =commandを`which command`と同じ処理にする # # ### Complement ### # autoload -U compinit; compinit # 補完機能を有効にする # setopt auto_list # 補完候補を一覧で表示する(d) # setopt auto_menu # 補完キー連打で補完候補を順に表示する(d) # setopt list_packed # 補完候補をできるだけ詰めて表示する # setopt list_types # 補完候補にファイルの種類も表示する # bindkey "^[[Z" reverse-menu-complete # Shift-Tabで補完候補を逆順する("\e[Z"でも動作する) # # ### zstyle ### # zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # 補完時に大文字小文字を区別しない # zstyle ':completion:*' list-separator '-->' # zstyle ':completion:*:default' menu select=2 # # ### Glob ### # setopt extended_glob # グロブ機能を拡張する # unsetopt caseglob # ファイルグロブで大文字小文字を区別しない # # ### History ### # HISTFILE=~/.zsh_history # ヒストリを保存するファイル # HISTSIZE=10000 # メモリに保存されるヒストリの件数 # SAVEHIST=10000 # 保存されるヒストリの件数 # setopt bang_hist # !を使ったヒストリ展開を行う(d) # setopt extended_history # ヒストリに実行時間も保存する # setopt hist_ignore_dups # 直前と同じコマンドはヒストリに追加しない # setopt share_history # 他のシェルのヒストリをリアルタイムで共有する # setopt hist_reduce_blanks # 余分なスペースを削除してヒストリに保存する # # # マッチしたコマンドのヒストリを表示できるようにする # autoload history-search-end # zle -N history-beginning-search-backward-end history-search-end # zle -N history-beginning-search-forward-end history-search-end # bindkey "^P" history-beginning-search-backward-end # bindkey "^N" history-beginning-search-forward-end # # # すべてのヒストリを表示する # function history-all { history -E 1 } # # # # ------------------------------ # # Look And Feel Settings # # ------------------------------ # ### Ls Color ### # # 色の設定 # export LSCOLORS=Exfxcxdxbxegedabagacad # # 補完時の色の設定 # export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30' # # ZLS_COLORSとは? # export ZLS_COLORS=$LS_COLORS # # lsコマンド時、自動で色がつく(ls -Gのようなもの?) # export CLICOLOR=true # # 補完候補に色を付ける # zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} # # ### Prompt ### # # プロンプトに色を付ける # autoload -U colors; colors # # 一般ユーザ時 # tmp_prompt="%{${fg[cyan]}%}%n%# %{${reset_color}%}" # tmp_prompt2="%{${fg[cyan]}%}%_> %{${reset_color}%}" # tmp_rprompt="%{${fg[green]}%}[%~]%{${reset_color}%}" # tmp_sprompt="%{${fg[yellow]}%}%r is correct? [Yes, No, Abort, Edit]:%{${reset_color}%}" # # # rootユーザ時(太字にし、アンダーバーをつける) # if [ ${UID} -eq 0 ]; then # tmp_prompt="%B%U${tmp_prompt}%u%b" # tmp_prompt2="%B%U${tmp_prompt2}%u%b" # tmp_rprompt="%B%U${tmp_rprompt}%u%b" # tmp_sprompt="%B%U${tmp_sprompt}%u%b" # fi # # PROMPT=$tmp_prompt # 通常のプロンプト # PROMPT2=$tmp_prompt2 # セカンダリのプロンプト(コマンドが2行以上の時に表示される) # RPROMPT=$tmp_rprompt # 右側のプロンプト # SPROMPT=$tmp_sprompt # スペル訂正用プロンプト # # SSHログイン時のプロンプト # [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && # PROMPT="%{${fg[white]}%}${HOST%%.*} ${PROMPT}" # ; # # ### Title (user@hostname) ### # case "${TERM}" in # kterm*|xterm*|) # precmd() { # echo -ne "\033]0;${USER}@${HOST%%.*}\007" # } # ;; # esac # # # # ------------------------------ # # Other Settings # # ------------------------------ # ### RVM ### # if [[ -s ~/.rvm/scripts/rvm ]] ; then source ~/.rvm/scripts/rvm ; fi # # ### Macports ### # case "${OSTYPE}" in # darwin*) # export PATH=/opt/local/bin:/opt/local/sbin:$PATH # export MANPATH=/opt/local/share/man:/opt/local/man:$MANPATH # ;; # esac # # ### Aliases ### # alias r=rails # alias v=vim # # # cdコマンド実行後、lsを実行する # function cd() { # builtin cd $@ && ls; # } #
(要は、.zshrcファイルをいじろうとしたので、「#」とか使ってしまうと、開業した際に自動コメントアウトが入っちゃうんでしょうね。
こんな時は以下のようにすると、きれいに貼り付けることが出来ます
ペーストモードを使う
- Vimを開く
- Vim上で以下のコマンドでペーストモードにする
:set paste
- ペーストしたいものを貼り付ける
alコマンドを使う
以下のやり方でも解決できます。
- Vimを開く
- Vim上で以下のコマンドを打つ
:al
- ペーストしたいものを貼り付ける
環境周りは、
上記に上げてあるので、お使いください