顯示具有 Vim 標籤的文章。 顯示所有文章
顯示具有 Vim 標籤的文章。 顯示所有文章

2017/07/19

vim 快速使用 sudo 存檔的語法

平常改設定檔通常都是「sudo vim xxx.conf」,不過直接切換成 root 修改檔案其實風險還蠻大的,特別是邊喝酒邊改系統的時候 (?)。

倘若不想使用 sudo vim 來修改系統設定檔時,就 vim xxx.conf 即可。雖然沒有寫入權限,但至少讀取檔案內容是沒問題的。

以一般使用者開啟系統擋時,每次做變更都會收到警告訊息「Warning: Changing a readonly file」,表示 vim 偵測到沒有權限變更檔案內容,避開非預期的異動正是避開誤寫的好方法。那當修改完成後需要寫入時,則可以使用以下指令臨時切換成 root 並寫入檔案:
:w !sudo tee %



說明一下上面那一段到底是什麼意思。

「:w」和大家所知道的寫入檔案是一模一樣的,但若後面加上其他指令,例如「:w ! tee」其實就是把預備寫入的檔案內容 pipe 給後面的指令處理,前面這個寫法就是把檔案內容丟給 console 的 tee 處理,所以可以看到 tee 檔案內容輸出到螢幕上 (stdout)。

vim 中的「%」符號代表的是正在編輯的檔案名稱,可以使用「:!echo %」指令看看會輸出什麼資料。若是「vim xxx.conf」則會印出「xxx.conf」;「vim path/to/xxx.conf」則會印出「path/to/xxx.conf」,應該不難理解。

綜合以上幾個撇步,「:w !sudo tee %」的意思,其實就是讓 vim 不要自己更新檔案,而是將檔案內容拋給以 root 身份執行的 tee,並讓 tee 寫入 vim 目前正在編輯的檔案。tee 寫完檔案以後,vim 會偵測到檔案異動並詢問是否要重新載入 (load) 更新過的檔案內容,重新載入以後就可以繼續下一個批次的修改。

2014/09/29

Vim Arrow Key Alias



每次用 autocomplepop 都會覺得右有要移動到方向鍵才能選字實在麻煩。

於是開使加了一些 short keys 讓操作簡單一底,二隻手也可以盡量不宜開主鍵盤區域。





在 .vimrc 中加入 maping,來取帶 arrow 按鍵:
imap <C-J> <Down>
imap <C-K> <Up>

這樣編輯時跳出選字方塊時,變可以使用 Ctrl + J or K 來上下選字。

2013/09/04

Setting Vim from Command Line Argument

因不同環境編碼不同,而需要從外部程式呼叫 vim 時直接設定編碼。苦想不到解法時,看到 NeoBundle 第一次執行 vim 要安裝 bundle 時,執行「vim +NeoBundleInstall」,翻了很久才找到「+」的說明文件 (天曉得為什麼要用 :h -c 才能找到文件啊 ....)

假設要在 vim 中執行「:set fileencoding=utf-8」,可以改做由 command line 執行:
vim +fileencodeing=utf-8

所以稍早在 .bashrc 裡面加了:
export SVN_EDITOR="vim +\"fileencoding=utf-8 encoding=utf-8\""

2013/08/16

Menu Color Settings in Vim

手上用的 vim-autocomplpop 選單中,被選取的項目一直都是白底白字 (好閃啊)。

以為是 plugin 設定的問題,最近才知道是 vim color settings 的關係,在 .vimrc 加入一行設定就可以解決:
highlight PmenuSel term=reverse ctermbg=white ctermfg=black


Reference:
ns9tks / vim-autocomplpop / issues / #57 - customize pop-up colors

2013/07/11

Disable New Line at End of File in Vim

Vim 預設會在檔尾加上換行字元,原因是在 CLI 時 cat 檔案,顯示的結果比較好看。

檔尾有會行字元:
zero@dev$ cat eol.txt
content
zero@dev$

檔尾沒有換行字元:
zero@dev$ cat eol.txt
contentzero@dev$

雖然在檔尾加上換行字元顯示時較清楚,但某些程式裡面可能會造成問題 (像 PHP)。

在 .vimrc 中加入設定,讓 vim 不要在檔尾加上換行字元:
set noeol
set binary

2013/06/25

Vim 編譯參數

Vim configure 時預設不會支援 multi-byte,若要讓 vim 支援需設定參數 --with-features=big (或 huge) 及 --enable-multibyte:

./configure --prefix=/usr/ --with-tlib=ncurses --with-features=big --enable-multibyte