資工問題雜筆

[資工雜筆] vim terminal快速切換到各文件和調整各文件的視窗大小

vim內建關於對切視窗和操作視窗大小的鍵不是很好按,要按一大堆鍵,才能進行一個操作。例如ctrl+w+i才可以切換到其它文件的小視窗。然而,這些操作偏偏又是常用到的,按這麼多鍵才能進行一個操作,總是會覺得很不方便。 今天試著把跟vim terminal切換和開新文件的鍵都寫成alt mapping,以後要操作就很方便。

內建的熱鍵

vim內建新增文件到目前terminal(切視窗)的方法是:split 和 :vsplit,分別是水平分割和垂直分割。至於增加視窗大小和切換文件的方法,在以下網址都有介紹。 http://c9s.blogspot.tw/2007/07/vim-tips-split-window.html 總而言之,真的是不太好按,而且也容易忘記熱鍵是什麼。

最一開始嘗試用function解決

一開始本來嘗試用function解決。我把他寫成

imap d :split 
imap i :call ChangeTerminal() 
func! ChangeTerminal()
      s:word =input("Change which direction (i/j/k/l) ?")
while 2>1
      if s:word='g'
            break
      elseif s:word='i'
           execute <code>"normal \+"
‧
‧
‧

大概這個樣子,詳細的code我刪掉了,不過沒關係,只要這樣就能表達意思了。這樣做有一個好處就是大幅減少ctrl+英文字母的mapping種類。因為ctrl+英文字母在很多plugin都有用到,如果我設個

imap  

直接就佔掉一個quota了。 然而,這樣做還是沒有完全改善以前的缺點。雖然我有用一個無窮迴圈包住我們的操作,只要我們一直重按一個字母就可以一次大幅度改變視窗大小。然而,我們每按一個字母,就要按一次enter,還是很麻煩。當然,我後來還是有想到其它的替代方案,譬如輸入數字之類的。但是這些方法都沒有辦法動態顯示視窗目前調到多大多小,例如按了5個i,視窗還是不會有任何反應,必須要跳出這function後,才會看到改變了多少。 這部分的參考資料: http://unix.stackexchange.com/questions/46827/vim-executing-a-key-command-in-a-function

改用alt 做為mapping

既然要避掉使用ctrl mapping,那就用alt mapping吧! 用alt alias最大的優點就是可以隨便自己mapping,因為大部分的plugin都不太會用alt 做mapping,這是因為alt+英文字母有可能會不小心開啟視窗最上排那排設定。那所以我們自己使用的時候,只要避開這些關鍵英文字母,其它的字母就可以任意使用啦。 用alt 做為mapping有個可能發生的缺點,就是<M-***>沒有辦法順利mapping。以下這兩個網址點出了這個問題: http://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal

http://vi.stackexchange.com/questions/2350/how-to-map-alt-key

解決方法就照第二篇寫的就可以囉。 以下是我最後寫的部分mapping,有興趣可以參考我的github

https://github.com/i314i/myvimrc

"cut terminal
execute "set =\ez"
imap  :split
map  :split
execute "set =\ex"
imap  :vsplit
map  :vsplit
"change the size of each terminal
execute "set =\ei"
imap  +i
map  +

替代方案——Screen

Screen是一支可以讓我們在同一個terminal裡面弄出很多terminal的程式,算是一支滿好用的程式。 不過,在我的電腦上,如果screen開的terminal一多的話,很容易整個terminal就爆了,所以後來我也不太用這支程式了。

2 thoughts on “[資工雜筆] vim terminal快速切換到各文件和調整各文件的視窗大小

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s