網頁

2014年6月8日 星期日

[WorkingEnv][vim] 打造自己的工作環境-5 (寫自己的toggle mouse mode function)

[主題]:
在前面幾篇文章定義了,tmux的mouse mode的方法後(PREFIX+m & PREFIX+M),我發現一件事情:”當tmux的mouse mode和vim的mouse mode同時打開,vim的mouse mode會遮蔽tmux的mouse mode”。


我的意思就是,當兩邊的mouse mode打開進到vim裡面,tmux的mouse mode等於沒有打開。
也就是之前我們打開tmux mouse mode然後用mouse直接選後ctrl+c的方式會失敗。(因為被屏蔽了)。


[Work-Around]:
好吧,直覺想法就是想要用tmux的mouse mode就把vim的mouse mode關閉。反之,平時就打開。


我們都知道在vim下把mouse mode打開可以在~/.vimrc下面寫:
:set mouse=a


而若要把mouse mode關閉(只做用在vim command mode),可以寫:
:set mouse=c


而基礎的vim scripting告訴我們,設定變數可以寫以下的code:
let g:mouse_mode = 1
如果是要寫一個function則是可以寫以下的 code:
func! Mouse_on_off()
endfunc


如果要寫一個if else的statement則是可以寫以下的code:
  if g:mouse_mode == 0
  ...
  else
 ...
  endif


有了這些knowledge之後我們就可以把全部兜起來,如下,我們就可以有mouse mode的toggle hot key了! :
"{{{ Mouse Toggle
let mouse_mode = 0 " 0 = c, 1 = a


func! Mouse_on_off()
  if g:mouse_mode == 0
     let g:mouse_mode = 1
     set mouse=c
  else
     let g:mouse_mode = 0
     set mouse=a
  endif
  return
endfunc
"}}}


nnoremap <silent> <C-m> :call Mouse_on_off()<CR>

[使用方法]:
如果在~/.vimrc設定好以上,當在vim內按下 ctrl+m時,如果mouse mode是打開的, 那麼就會關閉。反之就會打開。

這樣就可以work-around掉,tmux的mouse mode被vim mouse mode屏蔽的問題了。

沒有留言:

張貼留言