Vim 在貼程式碼 或 作任何貼上的動作, 都會認為是正常輸入, 於是自動 indent (縮排), 要避免自動縮排, 於是會需要下 :set paste 的命令, 維持貼上的縮排狀況.
於是會在 .vimrc 作下述設定: (按 F9 就會自動輸入 :set paste)
nnoremap <silent> <F9> :set paste<CR>
有沒有方法可以讓貼上時, 自動偵測就使用 :set paste mode 呢?
Vim 於 Linux、Mac、Putty 貼上時 自動切換成 Paste 模式
看到此篇文章: kuanhung c: vim bracketed paste mode, 有下述設定可以使用: (下述設定於 .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("") cmap <Esc>[200~ <nop> cmap <Esc>[201~ <nop> endif
上面這段只要環境有支援 bracketed paste mode 的, 就可以貼上自動偵測轉換.
註: 目前支援 bracketed paste mode 的環境有下述:
- Linux: gnome-terminal
- OSX: 終端機(Terminal)、iterm2
- Windows: 新版的 Putty