地球上的大熊, 巧遇上火星的你

[教學]解決vim貼上內容時縮排問題

@ 2011-4-17 01:54 AM

2013-03-05更新:

如果想vi默認為paste mode…請將下一行加到~/.vimrc…就不用每次用:set paste來開啟。

set paste
=======更新完畢==============

大家也許也遇過在vi貼上(paste)內容時,縮排(indent)格式出現錯誤。

例如要將下面內容貼上putty的vi

<project name="myapp" default="build" basedir=".">
  <property name="builddir" value="${basedir}/build" />
  <target name="prepare" depends="clean,init" />
  <target name="init">
      <mkdir dir="${builddir}" />
      <mkdir dir="${builddir}/api" />
      <mkdir dir="${builddir}/log" />
      <mkdir dir="${builddir}/coverage" />
      <mkdir dir="${builddir}/phpcb" />
  </target>
</project>
結果出現錯誤的縮排(indent),如下圖:


解決方法是在貼上前輸入
:set paste


貼上內容,注意下方的-- INSERT (paste) --


完成貼上後輸入
:set nopaste


這方面的確有效,不過如果每次都需要用:set paste/nopaste來切換paste mode太麻煩了。

更懶的方法是在用戶home下.vimrc新增一行

set pastetoggle=<F12>


那只需要按F12就可以切換paste mode!

簡單來說:

F12 (開啟paste mode) -> 貼上內容 -> F12 (關閉paste mode)


延伸閱讀:
vimrc檔案設定:http://greenisland.csie.nctu.edu.tw/wp/2005/09/21/341/
英文教學:http://mr-euro.com/vim-paste-indent-problems/

5 評論

現在看到熊小一堆LAMP教學
不過我也只會Window底下的~真是受教受教~學到蠻多的~
感謝

發佈者 : kkjkj 等級: 13等級: 13等級: 13等級: 13  @ 2011-4-17 09:58 AM

這招真是太實用了,我也常常為貼上這個問題所苦
我一直以為是用:set noai但總是沒有用
謝謝熊大提供解決之道

發佈者 : ianroo 等級: 7等級: 7等級: 7  @ 2011-4-17 01:05 PM

其實我是被這問題困擾了一會…才去找方法…當初只看到有英文的。

所以想如果弄個中文的教學也許對其他人有幫助~

發佈者 : Vic 等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32  @ 2011-4-17 02:57 PM

nmap <silent> <F4> :set invpaste<CR>:set paste?<CR>
imap <silent> <F4> <ESC>:set invpaste<CR>:set paste?<CR>

這樣子設定 不管在NORMAL MODE或INSERT MODE都可以按 F4 來開關

發佈者 : x13 等級: 13等級: 13等級: 13等級: 13  @ 2013-3-5 11:53 AM

既然x13推了上來…熊也來更新一下

如果想vi默認為paste mode…請將下一行加到~/.vimrc…就不用每次用:set paste來開啟。

set paste


發佈者 : Vic 等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32  @ 2013-3-5 01:30 PM

   


  可打印版本 | 推薦給朋友 | 評分