vim/gvim 有哪些實用技巧?


基礎內容:Vimer的程序世界

各種實用小設置:Vimbits

基礎實用技巧演示:Vimcasts - Free screencasts about the text editor Vim

Vim 操作挑戰賽,給出各種不同的編輯要求,比賽誰能用更少的按鍵完成,有各種奇技淫巧。向其他編輯器用戶秀優越感的時候可用。上面提到的 Vimcast 也有關於這個的專題:VimGolf - real Vim ninjas count every keystroke!

一個 Emacs 用戶看不慣 Vim 用戶那麼跳,用 Emacs 挑戰 VimGolf 的部分項目:Emacs Rocks!

Vim 高效格式化文本實例,此君雖然很跳,但是其中提到的技巧很有實用意義和啟發性。這個是此君的 Vimeo 頁面:http://vimeo.com/user1690209,還有更多其他視頻,不過入門級的居多,不夠這個實用。可以科學上網的建議看 Vimeo 的,更清晰。

視頻封面globals,_command_line_and_functions_640x480視頻


1,學會做減法,而不是總做加法。Vim的確從默認配置開始,就給了用戶很多選擇,但有很多選擇並不意味著所有選擇都要用到。比如移動游標這個需求,有很多種方式可以做,精準移動有wb這種單詞級別移動,有hjkl這種最原始的按字元移動,也有f這種行內搜索系,大篇幅移動有按兩次括弧這種「語法」塊級別的移動,也有一次翻整頁,半頁或者多行等,而這種行間移動又根據是否同時滾屏而有區分,如果不做減法,你要移動一下游標也得面臨選擇困難症。事實上,以上這麼多種移動,無非滿足了兩種需求,一是精準移動游標以便編輯,二是大篇幅移動游標以瀏覽全文,於是我做了一個簡單的選擇:全部用hjkl這種原始方式移動,同時調整鍵盤觸發速度,另外將JK映射為整頁翻動,當然我還將j,k映射為jzz,kzz,即行間移動之後立即滾屏使游標一直處於中間。這麼選擇的原因是,hjkl操作最基本也最直觀,通過調整鍵盤按鍵速度,完全能滿足快速精準移動需求,wb這種雖然看起來快,但判斷單詞如何分割並不是一件容易的事,特別是對我這種用Vim寫多種語言的情況,每種語言對word的定義並不一樣,另外,對於做大篇幅移動,兩次括弧的弊端和we類似;而通過將j,k映射為jzz,kzz,瀏覽文本會變的異常方便,特別是要反覆上下移動來定位時。 通過作了這個簡單的簡化,我的移動游標操作異常簡單直白而有效率,並且當別人用我的Vim時也不會有何不適,這一點對於一個高度定製化的Vim配置來說是很難得的優勢,另外w鍵因此可以被空閑出來被我映射成保存鍵,b鍵被我用作塊選。

2,學會通過自定義解決問題,而不是學一堆奇技淫巧。我在「Vim中國」群呆過不短的一段時間,也算是接觸過相當多的Vim用戶,發現吐槽編輯器默認行為的人很多,喜歡搞一堆花里胡哨插件搞類IDE的人也不少。其實,一直覺得用Vim或Emacs的意義在於,你可以自定義,你的配置也不需要多完美多通用,關鍵是自己用著順溜,對於吐槽編輯器默認行為(比如說Emacs傷小拇指)的人,你為毛要用神器,如果懶得動配置,或者說動腦子自己解決問題,就用IDE去吧。通過自定義解決問題才是這兩款神奇的魅力所在,對於互噴默認行為的Vimer和Emacser,我只能說,你們這些二逼滾粗我的視線... 額,寫完這部分發現有點離題,不好意思忍不住了。 話說回來這部分跟第一點其實是一個意思,與其不斷往自己Vim里增加各種功能,不如用一個不變應萬變的辦法:遇到需求自己寫腳本解決。這樣一來你其實只需要學一件東西(而不是無數插件的用法)了:寫Vim Script。

3,Vim配置其實可以如此便攜:見過各種所謂大牛的Vim配置,現在想想覺得好笑,不過對新手而言有個指路明燈也許在某個階段是件好事,儘管也許過了這個階段大家都會覺得好笑。 說回正題,為了做到便攜,第一是要屏蔽平台差異,第二是自動識別工作目錄,第三是破除vimrc文件位置的限制,使得配置可以用Git或Dropbox管理(當然同時使用兩者是可行的,但是需要處理一些trick的問題),第四是安裝插件要便捷。對於第一點,這需要積累,在不同平台用的多了,解決過的問題越多,自然越順溜。對第二點,其實會一點簡單的VimL就可以搞定。對第三點,其實就是在~/.vimrc里只放一句source就解決了,我不知道會這個技巧的人有多少,我想到的時候反正是超開心的,哈哈哈... 第四點嘛,我一直在改進中,最近的做法比較中庸了,就是用git submodule裝vundle(不然vundle是要手動裝的),其它插件就用vundle裝,之前用過全部插件都用git submodule裝的方案,當然確實一鍵了,不過添加刪除插件的話就比較麻煩。

最後附上小弟的Vim配置:http://www.github.com/luochen1990/vimconf


autocmd FileType tex set textw=72


今天正好用到了,分享到這裡。

把Vim作為16進位編輯器:

1. Vim打開二進位文件

2. 運行命令

:% ! xxd

3. 編輯

4. 完成以後運行下面命令轉回來

:% ! xxd -r

5. 保存


Text object是一定要學習的


不知道有沒有人提到撤銷與重做這兩個功能。

大多數的編輯器只能在一條時間線上進行這兩個操作,很多時候你會發現這個設計實際上是十分反人類的。

直到我用了gundo,我擦。。。爽快的感覺無法言喻。

這個圖片顯示的是我在版本2的基礎上做了改動,一直到版本5,然後想恢復到版本2,再進行改動到版本6。

完全就是指哪打哪啊!!!


推薦閱讀:

visual studio code 如何安裝插件?
VSCode打開時這幾個同樣名稱的進程分別有什麼作用?
vim或者emacs有什麼插件可以像ide那樣分析語法樹的嗎?
OSX 上免費的MarkDown編輯器,大家一般用的什麼?
在 Linux 下,大家都喜歡用什麼編輯器?

TAG:前端開發 | 文本編輯器 | 代碼 | Vim | Gvim |