Vim 於 Linux、Mac、Putty 貼上時 自動切換成 Paste 模式

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

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料