2010-01-28 132 views
50

我用VIM 10年以上,但從來沒有真正進入VIM腳本(總是主觀beliving,這是一個領域,VIM比Emacs的較弱)。有關VIM腳本的良好指導?

日前,實現「一個VIM腳本,我可以執行正常模式下的命令」使我的頭腦去「雅哈」,突然開始意識到爲什麼VIM腳本的部分是它的方式。

normal ma10jd'a20kp 

Marker m = currentLocation(); 
advanceLines(10); 
Buffer b = delete(currentLocation(), m); 
advanceLines(-20); 
insertBuffer(b); 

更優雅的現在的問題是 - 什麼是一個很好的資源,從學習VIM腳本?

謝謝!

回答

50

我能給出的最好的建議是,你閱讀:

:help usr_41.txt 

,這將給你的基礎知識的很好的概述。然後找到一些你想要做的事情併爲它們創建功能。當你這樣做時,大量使用:

:help function-list 

瞭解所有內置函數是什麼。它大部分與其他腳本語言非常相似(雖然語法較爲粗糙),所以在Python或任何其他語言中操作文本的經驗都是有用的。

此外,請查看vim scripts pageGoogle以獲取現有腳本的示例以幫助擴展您的知識。

最後(也許最重要的是),不要害怕詢問stackoverflowVim mailing list,並且會對您可能遇到的任何問題提供大量支持。

14

我在一個類似的情況。它仍然在我的「閱讀」列表中,但我今天剛發現Scripting the Vim editor。 IBM的DeveloperWorks的文章通常非常好,所以可能值得一試。

+2

我做了一下今天的Vimscript和IBM DevWorks導遊是偉大的,但我開始與第1部分(答案鏈接3部分)http://www.ibm.com/developerworks /linux/library/l-vim-script-1/index.html – 2012-04-25 06:50:01

+0

非常感謝那篇文章,@RichardMichael--這正是我一直在尋找的閱讀材料! – 2015-03-17 02:13:31

14

鋁給你一個good answer。我還會添加vim.wikia,其中有幾個與您的問題相關的提示。

在側面說明。

我不會說ma10jd'a20kp是更優雅。我看到以下問題:

  • 這是相當難以維持(什麼?如果行數將成爲一個參數),
  • 人喜歡覆蓋鍵他們從來沒有學會使用(這可能是固定用一個撞:normal!),
  • 一些正常模式命令具有上側情況下的奇怪的行爲(如<esc>當光標在第一列中),
  • 它攪亂標記一個,和無名寄存器 - 其他腳本,甚至用戶可能會期望他們的值不會變成alt由您的腳本提供。
+3

+1:我誤以爲「比我想象的更清淡」的原始帖子!否則,我會對不可維護的':normal'行進行評論。只有當我找不到使用腳本構造的好方法時,我傾向於使用':normal'。無論是手動輸入一個鍵還是編寫一個可以維護的功能。 – DrAl 2010-01-28 14:43:22