學習使用Vim(二)——User Manuals, Getting Started

Vim的用戶手冊主要包含以下三個部分:

    Getting Started;
    Editing Effectively;
    Tuning Vim;
    分別代表基本編輯技巧,更優化的編輯技巧和優化Vim編輯器本身。

    先當然從Getting Started開始學習。

    About the manuals.
    這一節主要是對用戶手冊的基本介紹。其中說了,可以“從頭到尾像讀一本書那樣來讀用戶手冊”。這也是我準備要做的事。

    最有用的是兩點,一是用“CTRL-]” 和“CTRL-o”跳來跳去;二是vimtutor的使用。


    The first steps in vim
    這一節提供了編輯文件的基本信息。是以後章節的基礎。除去和vimtutor重複的內容,基本知識如下:
    vim中~代表不存在此行。
    普通模式和插入模式。(當不知道在哪個模式時,就多按幾次esc回到插入 模式)
    vim中方向鍵的選擇是出於按鍵最快捷的考慮。
    J可以將兩行合行(join?).
    第二次U命令會取消前一次U命令的結果。
    多種插入方式:i, a, o, O。
    ZZ命令可以推出vim。
    :e!命令可以不保存修改,繼續編輯。
    :help :help 關於如何獲取幫助的幫助。但這個幫助比較複雜,我覺得這一節中Finding help的內容就完全足夠了。


    Moving around.
    這一節主要講怎樣移動光標。移動光標是編輯文本時最頻繁的操作,所以移動光標的速度很大程度上決定了編輯效率。
    跨單詞移動:w,b,e,ge。
    用w和b跨段落移動比用l和k快得多。
    跨句子移動:$, ^, 0 。
    重要:單字符搜索命令,f,F,t, T。
    %用於括號匹配(形象地理解爲兩個0通過斜槓匹配起來)。
    gg回到文件第一行。
    當前頁面的移動:H(home),M(middle),L(last)。
    打開行標號:set number。
    有用的命令zz,將光標行置於頁面中間。
    使用*和#快捷搜索。
    使用\<和\>來搜索完整單詞。
    使用:scriptnames命令來找到配置腳本的實際位置。
    用於搜索匹配的簡單正則表達式:
        ^表示句首,$表示句尾。
        .用於匹配任意字符。
        想搜索. 要使用轉義符\。
    使用''跳回,或者使用CTRL-O,CTRL-I跳轉。(O代表older,I只是因爲在O旁邊)
    mark(m):使用自己的標記。
    特殊標記:', ", [, ]。


    Making small changes.
    此節主要講修改和移動文本的基本方法。包含三個重要概念:操作符和運動符,可視模式和文本對象。
    exclusive和inclusive的區別。
    operator-motion模式。
    c:change, 與d類似,但會進入插入模式。
    cw的例外:There is a saying that for every problem there is an answer that is simple, clear and wrong.
    單字母命令:x--dl, X--dh, D--d$, C--c$, s--cl, S--cc 。
    最簡單但有力的vim命令 . 。
    使用v和V進入可視模式。
    使用CTRL-v進入可視塊模式。
    可視模式下的o和O命令: o for other end。
    P 命令,粘貼在光標前或光標上。
    xp快速修改“teh”這一類的問題。
    y命令,用yank代替copy。
    剪切板:用"*yy 和"*p來實現全局的 複製和粘貼。
    文本對象 :aw(A Word), is(Inner Sentence), as(A Sentence)。
    R進入替換模式。
    用~來改變大小寫。
    I 和 A, 句首插入和句尾插入。


    Set your settings.
    這一節介紹了最基本的優化vim和自定義偏好的方法,包括修改vimrc文件,增加插件和定義自己的宏。
    :version命令可以查看vimrc文件的基本信息。
    $VIMRUNTIME/vimrc_example.vim提供了一個簡單的vimrc文件樣版。
    filetype plugin indent on : 自動辨別文件類型,插件和縮進。
    映射可以將一系列的vim命令綁定到一個按鍵上。
    一個簡單的映射:map<F5> i{<Esc>ea}<Esc> 。
    常用反斜槓\來定義映射 。
    vim插件只是一個啓動時自動加載的vim腳本。
    使用:helptags 命令將一個腳本的幫助文檔加入到本地幫助文檔中。
    :set iskeyword& 可以將選項置回爲默認值。
    :set cmdheight=3 可以控制命令行高度。


    Using syntax highlighting.
    這一節主要將怎樣使用色彩來使文本更生動,並且提高工作速度。
    使用:syntax enable來開啓色彩功能,例如註釋是藍色,關鍵字是褐色,字符串紅色等。
    可用的文件類型參見$VIMRUNTIME/syntax。
    使用:syntax reset來讓顏色恢復到默認值。
    使用:colorsheme evening來選擇其他顏色策略,所有顏色策略參見$VIMRUNTIME/colors。
    使用:runtime syntax/colortest.vim來檢測常用顏色組合的效果。
    使用:TOhtml來將文件轉換成HTML格式。
    關於顏色的更多內容參見usr_44.txt 和syntax的幫助內容。


    Editing more than one file.
    這一節主要講如何同時在一系列文件上工作,並做跳轉和複製。
    使用:edit filename, vim會關閉當前文件開啓一個新的。
    使用vim fileone filetwo filethree來編輯多個文件。
    使用:next,:next!,:wnext來在文件間跳轉。
    使用:args來看文件列表。
    使用:set autowrite和:set noautowrite。
    使用:args filefour filefive filesix來重定義文件列表。
    使用CTRL-^在兩個文件間切換。
    ‘“可以回到上次光標停留的地方。
    ’.可以回到上次修改過的地方。
    小寫字母是文件局部話的標籤,大寫字母則是全局標籤。
    使用:marks M來查看M標籤的位置。
    :set patchmode=.orig 來保存原文件。(對寫代碼很有用)
    寄存器是vim存儲文本的地方,常使用a-z編號的寄存器。
    "fyas代表向f寄存器中存儲一個句子。
    使用"fp來粘貼。
    使用:write >> logfile 將文本加入到另一個文件後面。
    vim -R file 可以用只讀模式打開文件。
    vim -M file 可以用更嚴格的只讀模式打開文件。
    使用:saveas命令和:file命令。 

 

    Splitting windows.
    這一節將的是分割窗口來同時編輯不同文件或同一文件的不同位置。
    最簡單的分割窗口命令:split。
    CTRL-W w 命令用來在窗口間跳轉,:close命令關閉窗口。
    特殊的,使用:only來關閉除當前窗口外的所有窗口。
    使用:split filename或者:new來分割窗口並編輯其它文件。
    在vim中,調整窗口大小是一個特殊動作:使用鼠標比使用鍵盤方便得多。
    使用:vsplit可以垂直分割窗口。(類似的:vnew也可用)
    在窗口間移動和在文本中移動類似,只是要加上CTRL-W。
    使用CTRL-W K可以將窗口移動到頂部(其它三個方向也類似)。
    使用:qall或者:wall等對所有窗口進行操作。
    vim -o one.txt two.txt three.txt或者:all命令的使用。
    vimdiff main.c~ main.c 用來比較不同的文件。
    使用:edit main.c 和:vertical diffsplit main.c~ 可以實現同樣的效果。
    使用:edit main.c 和:vertical diffpatch main.c.diff來開啓比較模式。
    使用]c 和[c在changes之間跳轉。
    :diffupdate , dp(diff put)和do(diff obtain)。
    :tabedit filename和:tab split。
 
    Using the GUI
    這一節主要介紹vim的圖形界面可以提供的額外功能。
    標題欄符號的意義:-不可修改,+包含變化,=只讀,=+只讀幷包含變化。
    移除Toolbar,在vimrc文件中添加 :set guioptions-=T。
    使用:behave xterm 或者:behave mswin 來修改鼠標的工作方式。
    可優化的鼠標項: mouse, mousemodel, mousetime, mousehide, selectmode。
    同時使用"current selection"和"real clipboard"來優化編輯效率。
    "*寄存器代表current selection。
    "+寄存器代表real clipboard。
    Select mode:類似Visual mode,區別是選擇模式下輸入字符會替換已選字符。
    使用:set selectmode+=mouse來開啓選擇模式, 此時可用SHIFT+方向鍵移動光標。
 
    Making big changes.
    這一節講大規模更改文本的方法,主要是在可視模式下的操作和使用外部程序完成複雜操作。
    錄製命令的三個步驟:start recording-q{register},type your commands,finish recording-press q。
    使用命令@{register}執行錄製好的宏。
    使用命令回放和使用.的區別:可重複多命令,有a-z這26個寄存器可用。
    修改寄存器n中錯誤命令的技巧:
        G        Go to the end of the file.
        o<Esc>        Create an empty line.
        "np        Put the text from the n register.
        {edits}         Change the commands that were wrong.
        0        Go to the start of the line.
        "ny$        Yank the corrected commands into the n register.
        dd        Delete the scratch line.
    使用q+大寫字母,代表在寄存器中增加命令。
    替換命令 :[range]substitute/from/to/[flags], 例如:%s/old/new/g (g for global and c for confirm)。
    使用:.write otherfile寫入單行文本。(. for current line and $ for the last line)
    替換單個章節 :?^Chapter?,/^Chapter/s=grey=gray=g。
    使用標記來描述範圍,mt,mb,:'t,'b。

    更有力的命令:global, 形式如下:[range]g/{pattern}/{command}。

    塊可視模式下,使用I和A插入。
    塊可視模式下,使用c和C刪除塊同時插入字符串。
    塊可視模式下,使用~,U和u進行大小寫轉換。
    塊左右移動,使用>和<, 用:set shiftwidth=4進行設置。
    使用:0read patch,將patch文件寫入文件首行。
    使用:.,$write tempo,將光標到文件結束的內容寫入tempo中。
    使用>>來增加文件內容而不是擦除重寫。
    gqap調整當前段落顯示格式。
    全行大寫gUU(gugu的簡化形式)。
    使用外部程序,使用命令"!{motion}{program}"。
    例如!5Gsort<Enter>, !!date<Enter>。
    使用:read !dir讀取dir命令的輸出。
    使用:write !wc將單詞數量寫入文件中(Unix命令 count words)。
    CTRL-L, redraw the screen。

 

    Recovering from a crash.
    這一節主要介紹在電腦崩潰的情況下如何恢復以前的工作。
    最基本的恢復手段:vim -r help.txt。
    此時可以用Vimdiff來比較恢復後的文件和恢復前的文件:
       :write help.txt.recovered
       :edit #
       :diffsp help.txt
    在沒有文件名的情況下編輯時,在正確目錄下執行vim -r ""。
    在合適的目錄下使用vim -r查找swap文件。
    使用特定的swap文件 vim -r .help.txt.swp。
    swap文件的命名規則:*.s[uvw][a-z]。

    swap文件存在的情況下的提醒:O,E,R,Q, A, D。


    Clever tricks.
    這一節主要介紹如何將多個命令結合起來使用。
    命令:%s/\<four\>/4/gc, 全文精準替換單詞four,並每次提示。
    C++文件的方法名重構:
        vim *.cpp
        qq
        :%s/\<oldFunctionName\>/newFunctionName/g
        :wnext
        q
       
999@q
    爲避免不含有oldFunctionName的文件造成錯誤,使用
        :%s/\<oldFunctionName\>/newFunctionName/ge
    使用:%s/\([^,]*\),\(.*\)/\2 \1/來將Doe, John替換成John。

    舉例,Makefile排序:
        /^OBJS    (找到以OBJS開頭的一句話)
        j    (移到下一行)
        :.,/^$/-1!sort    (從當前行到下方第一個空行之前,排序)
    反轉所有行序 :g/^/m 0。
    反轉從標籤t到當前行的行序 "mt", :'t+1,.g/^/m 't。
    計算文件字數 g CTRL-G。
    刪除每行末尾的空格和製表符 :%s/\s\+$//。
    編輯所有帶有"frame_counter"單詞的c文件 vim 'grep -l frame_counter *.c'。
    使用:grep frame_counter *.c,加上:cnext, :cprev, :clist。


    vim編輯器的用戶手冊的第一部分終於看完一遍了,雖然只是beginner級別的,但對我來說,內容已經不少,需要花一段時間好好的消化一下了。所以,接下來,不準備立刻開始學習用戶手冊的第二和第三部分,而是在實踐中逐漸熟練掌握學過的vim編輯方法,並積累更多有用的vim編輯技巧。
    近期來講,並不準備用vim來代替IDE的功能,一方面我的掌握程度還遠遠不夠。另一方面,每一個工具都有其最高效的作用域,我認爲如果將vim和eclipse結合起來使用,工作效率會更高。
    就我這樣半吊子的英語水平,看vim用戶手冊居然非常流利,幾乎沒有什麼生僻的單詞和難以理解的句子。這充分說明了作者將複雜的事情變簡單的能力。在我們平時工作中,也要有這種能力,畢竟,不能將一件事向60歲的文盲老太太解釋清楚,就不能說你充分理解了這件事。

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章