2024Vim從入門到精通_第1頁
2024Vim從入門到精通_第2頁
2024Vim從入門到精通_第3頁
2024Vim從入門到精通_第4頁
2024Vim從入門到精通_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Vim從入門到精通VimVim?Vim哲學入門vimrcWindows系統(tǒng)LinuxMacOSVim備忘錄緩沖區(qū),窗口,標簽已激活、已載入、已列出、已命名的緩沖區(qū)參數(shù)列表按鍵映射映射前置鍵寄存器范圍標注補全動作,操作符,文本對象自動命令變更歷史,跳轉(zhuǎn)歷史內(nèi)容變更歷史記錄全局位置信息表,局部位置信息表宏顏色主題折疊會話局部化獲取離線幫助獲取離線幫助(補充)獲取在線幫助執(zhí)行自動命令用戶自定義事件事件嵌套剪切板剪貼板的使用(Windows,OSX)剪貼板的使用(Linux,BSD,...)打開文件時恢復光標位置臨時文件備份文件交換文件撤銷文件viminfo文件臨時文件管理設(shè)置示例編輯遠程文件插件管理多行編輯使用外部程序和過濾器CscopeMatchItVim8中安裝Vim7或者更早的版本中安裝簡短的介紹nNCtrl-l運行時檢測查看啟動時間NUL符用新行表示GUI中快速改變字體大小:global:vglobal-在所有匹配行執(zhí)行命令:normal:execute腳本夢之隊重定向消息常規(guī)建議調(diào)整日志等級查看啟動日志查看運行時日志Vim腳本調(diào)試語法文件調(diào)試雜項附加資源Vim配置集合常見問題編輯小文件時很慢編輯大文件的時候很慢持續(xù)粘貼('paste模式)ESC后有延時無法重復函數(shù)中執(zhí)行的搜索進階閱讀加入我們參考資料VimqedBramMoolenaar1991年發(fā)布Linux、MacVimWindows

、python3、luapython、luaGithub

Why,ohWHYdothose#?@nutheadsusevi?VimVimVim變括號內(nèi)的文本,需要執(zhí) (讀做changeinnerparentheses);刪除整個段落的容,需要執(zhí) (讀做:deletearoundparagraph)VimVim腳本語言就如同鋼琴師彈鋼琴一Vim自帶一個交互式的教程,內(nèi)含你需要了解的最基礎(chǔ)的信息,你可以通過終端運行以下$$IDE或者其他編輯器很少是有“模式”Vim使用的越多,肌肉記憶將越容易形成。VimviStevie,支持兩種運行模式:"compatiblevim-"nocompatible"Vimvivim-

在第一周準備備忘錄通讀基礎(chǔ)Vim按需學習!Vim是學不完的。如果你遇到了問題,先上網(wǎng)尋找解決方案,你的問題可能已經(jīng)被解決了。Vim擁有大量的參考文檔,知道如何利用這些參考文檔很有必要:瀏覽附加資源最后一個建議:使用插件VimVim自帶Vim

Windows*niuxVimWindowssystemvimrcfile:"$VIM\vimrc"usersystemvimrcfile:"$VIM\vimrc"uservimrcfile:"$HOME\_vimrc"2nduservimrcfile:"$HOME\vimfiles\vimrc"3rduservimrcfile:"$VIM\_vimrc"userexrcfile:"$HOME\_exrc"2nduserexrcfile:"$VIM\_exrc"systemgvimrcfile:"$VIM\gvimrc"usergvimrcfile:2ndusergvimrcfile:"$HOME\vimfiles\gvimrc"3rdusergvimrcfile:"$VIM\_gvimrc"defaultsfile:"$VIMRUNTIME\defaults.vim"systemmenufile:"$VIMRUNTIME\menu.vim"我們只看上面這一段,Vimuservimrcfile:$HOME\_vimrc,當這一文件不存在Vim2nduservimrcfile:$HOME\vimfiles\vimrc;倘若這個文件還是不存在,Vim3rduservimrcfile:$VIM\_vimrcVim總是不讀取配置文件而感到煩惱了。LinuxMacWindows

vim系統(tǒng)系統(tǒng)vimrc文件:用戶vimrc文件:第二用戶vimrc文件:用戶exrc文件:defaultsfile:$VIM預設(shè)值$VIMRUNTIME預設(shè)值vimrc配置文件,我的版本可能并不是最簡單的版本,但是vimrc地址:minimal-vimrcvimrcGithub上展示(通"vim-config""dotfiles"的倉庫中),所以當你發(fā)現(xiàn)你喜歡的插件時,去Github主頁看看有沒有這樣的倉庫。?我正在使用什么樣的

VimIncludedpatches1-1051Vim7.4.1051TinyTinyversionwithout

HugeversionwithVimHugeversionwith

Vim

Huge。Vimtiny,small,normal,bigandhuge主要的輸出內(nèi)容是特性列表。+clipboard意味這剪貼板功能被編譯支持了,-clipboard意味著剪貼板特性沒有被編譯支持。一些功能特性需要編譯支持才能正常工作。例如:為了 工作,你需要使

Vimvim-x,vim-x11,vim-gtk,vim-gnome這些包或者相似的,因為這些包通常都是Vim

"DosomethingifrunningatleastVim7.4.42with+profileenabled.if"DosomethingifrunningatleastVim7.4.42with+profileenabled.if(v:version>704||v:version==704&&has('patch42'))&&has('pro"dostuff:h:h:hfeature-:h+feature-:hhas-/vgod/vim/vim-cheat-sheet-en.png/s/files/1/0165/4168/files/preview.png/Data/vi-vim-cheat-sheet.svg/vim/vim_cheat_sheet_for_programmers_scree/images/posts/vim-movement-commands-cheatsheet.pngVim中快速打開備忘錄:vim-cheat40。?Vim是一個文本編輯器。每次文本都是作為緩沖區(qū)的一部分顯示的。每一份文件都是在(標簽)Vim的時候沒有附帶任何參數(shù),你會得到一個包含著一個呈現(xiàn)一?vimvim

VimVim(寫回文件中):e:e

命令加載另一個文件,file1

使 我們能夠列出所有可以列出的緩沖區(qū)。插件緩沖區(qū)和幫助緩沖區(qū)通常被標記為 :w:w

全局緩沖區(qū)列表VimvishellVim

使 命令可以列出當前參數(shù)。使用:next,:previous,:first,:last命令可以在切:argadd,:argdelete或者

:argdo:args:args:argdo%s/foo/bar/ge|C源文件和頭文件中相關(guān)幫助::hargument-使 命令家族你可以定義屬于你自己的快捷鍵。該家族的每一個命令都限定在特Vim126種可以被映射。另外一些命normal,visual,operator-:nmap:nmap<space>:echo使 可以取消這個映射:nunmap對于更少數(shù),不常見的模式(或者他們的組合),:hmap-modes:nunmap到現(xiàn)在為止還好,對新手而言有一個問題會困擾他們::nmap是遞歸執(zhí)行的!結(jié)果是,右你自定義了一個簡單的映射去輸出:nmap:nmapb:echob(回退一個單詞):nmap:nmapaa,我們期望著光標回退到上一個單詞,但是實際情況是“Foo”被輸出到命令行里!因為在右邊,b已經(jīng)被映射到別的行為上了,換句話說就是:echo"Foo"<cr>。:nnoremap:nnoremapa通過不給一個右值來檢查你的映射。比如:nmap射,:nmap<leader>顯示所有 鍵開頭的普通模式下的映射如::noremap<left><nop>。

:h:hkey-:h:h映射前置鍵(Leader鍵)本身就是一個按鍵映射,默認為\。我們可以通過 中 來為把它添加到其他按鍵映射中nnoremapnnoremap<leader>h

先 鍵來觸發(fā),只需要這樣做letletg:mapleader='nnoremap<leader>hg:mapleaderVim腳本中,函數(shù)外的變量缺省的作用域是全局變另外,還有一個 的,可以把它理解為局部環(huán)境中的<leader>,默認值依為。當我們需要只對某一個條件下(比如,特定文件類型的插件)

:nmapLeaderLeader鍵。Leader:nmap:hLeader鍵是不會因此而改變的。你可以通過執(zhí)行Leader:h

:h:h

Vimy,粘貼的快捷鍵是p。Vim(d,c,s,x,0至0:1:2:19,他們其實是只讀的最queuea至z,至a,那aAa:與.和:最近一次使用的命令,.最近一次添加的文本,%:當前的文件名一次訪問的緩沖區(qū)。請參閱:halternate-fileVimL代碼時,這個寄存器用于存儲代碼+和*剪貼板Vim的文本("+dndGTKGUI:helpdnd:helpBlack_。比如,"_dd命令不會將文本放到寄"、1、+*中/、:global等命令調(diào)用的匹:let:let@/=

的時候就會跳轉(zhuǎn)到單詞"register:h :h上面提到過,復制的命令是y,粘貼的命令 或者P。但請注意,Vim會區(qū)分「:h符選取」與「行選取」。請參 獲取更多幫助:h行選?。好?或Y都是復制當前行。這時移動光標至其他位置,按下p就可以在光P字符選?。好?可以復制第一個單詞。這時移動光標至其他位置,按下p就可以P

a中。這時a隨時通 來查看寄存器的變化Vim中,y"yanking"Emacs中,"yanking"(Ranges)Vim分割的行號

范圍的使用是十分直觀的。以下為一些例子(其中,:d 的縮寫所有行(1,$的語法糖55333行(Vim會彈出提示信息,因為這是一個保留第三行至標注x"foo"foo需要注意的是,也可以用于表示范圍。區(qū)別在于,a,bbba5

1行至第6行, 會刪除第1行和第2行/"""quux"的那一行。刪除的就是最后找到的這一行。有時,VimVVim

VimCtrl+射::vnoremapfoo:<c-u>command,組合Ctrl+!!:.!。如果這時你如果輸入一個外部把當前段落的內(nèi)容替換成外部命 的輸出,原理是向前和向后各搜

:h:hcmdline-:ha-A-0-0viminfoVim進程最后一次結(jié)束的位置。1Vim進程倒數(shù)第二次結(jié)束的位置,

`

如果你想定義當前文件中的標注,可以先按下m再按下標注名。比如,按 就可以m。在這之后,如果你的光標切換到了文件的其他位置,只需要通過`m即可回到剛才標注的行。區(qū)別在于,'m而`mviminfoVim的時候保留小寫字符標注。請參閱:hviminfo-'來獲取更多幫助。如果你想定義全局的標注,可以先按下m再按下大寫英文字符。比如,按 就可以M 跳轉(zhuǎn)回來'^:hmark-:hmark-

Vim在插入模式中為我們提供了多種補全方案。如果有多個補全結(jié)果,Vim會彈出一個菜針對不同的補全方案,Vim

:h:h字典(:h'dictionary'):h同義詞字典(:h'thesaurus'):h:h:h:h:hVim:h:h:h:hOmniCompletionOmniCompletionC語言中補全一個結(jié)構(gòu)體如果你設(shè)置 選項,那么你就可以在一次操作中采用多種補全方案。這個選默認包含了多種可能性,因此請按照自己的需求來配置。你可以通 來調(diào)用下一:h:h:h:h

:h如果你想配置彈出菜單的行為,請一定要看一 這篇幫助文檔。默認:h:hins-:hpopupmenu-:hins-:hpopupmenu-:hnew-omni-h、j、klwb。但其實,"the:h:h

操作符是對某個區(qū)域文本執(zhí)行的操作。比如,d、~、gU和>都是操作符。這些操作符既再按動作指令,比如>j。在可視模式中,選中區(qū)域后直接按操作符就可以,比如Vjd。與動作一樣,操作符也可以搭配數(shù)字使用,比 可以將當前單詞以及下一個單詞:set:set

:h:h

~括號、中括號和大括號等)iai表示在對象內(nèi)(inner)操作,a表示對整個對象(around)操作,這時開頭和結(jié)尾的空格都會被考慮進來。舉個例子,diw可以刪除當前單詞,ci(可以改變括號中的內(nèi)容。(((文本對象同樣可以與數(shù)字搭配使用。比如,(((的括號上或最內(nèi)層的括號內(nèi),那 將會刪除從最內(nèi)層開始的兩對括號,以及他們間的所有內(nèi)容。其實,d2a2da(Vim接收數(shù)字作為參數(shù),那么最終結(jié)果就等同于兩個數(shù)字相乘。在這里,d 都是可以:htext-請參:htext-在特定的情況下,Vim會傳出事件。如果你想針對這些事件執(zhí)行回調(diào)方法,那么就需要用Vim

:h:h

來查看Vim中所有事件的列表,你也可以參 :h:hautocmd-events-autocmdautocmdFileTyperubysetlocalshiftwidth=2softtabstop=2comments-Ruby

vimrcfiletypeon。這就意味著,Vim讀 文件,然后根據(jù)文件類型來觸發(fā)相應的自動命令:e$VIMRUNTIME/filetype.vim"Ruby"樣,你就會發(fā)現(xiàn)其實Vim只是通過文件擴展 判斷某個文件是不是Ruby的通 就可以查看它們的執(zhí)行順序auauBufNewFile,BufRead*.rb,*.rbwsetf

Vim

Vim中的應用十分廣泛。而且,Vim為我們留出了一些易:h請參:hVim會把它們合并成一個。盡管內(nèi)容改動會合并,但作用的位置還是會只100你分離窗口時(比如使 命令),跳轉(zhuǎn)歷史會被復制過去Vim'、`、G、/、?、n、N、%、(、)、[[、]]、{、}、:s、:tag、L、M、H以及開始編輯一個Vim標記來為你指示當前位置。通1的下方,也就代表最后一次的位置。:hviminfo-:hviminfo-

:h:h:hVim

Ctrl+Ctrl+值得注意的是,Vimtreegitbranch(分支)十分類似。那么現(xiàn)在,Vim"foo"、"bar"quux"。這時候,存儲的樹形 Ctrl+Ctrl+

"bar

"foo

"bar"quux"Ctrl+下,我們無法訪問到兄弟節(jié)點(Ctrl+

g+

退到"baz"節(jié)點。再次按 會回退到"bar"節(jié)點命令/:undo:redo:earlier[count次改動之前。"?""s"、"m"、"h"、"d""f"之一。例如,:earlier2d會回退到兩天之前。:earlier1f則:laterg-Vim退出時就會清空。如果需要持久化存儲內(nèi)容變更記錄,請參閱viminfo文件的處理章節(jié)的內(nèi)容。vim-mundo。:h:h:hVim中,全局位置信息表只能有一個,但每一個窗口都可以有自己的局部位置信息表。這:h請參:h應用實例:如果我們想 遞歸地在當前文件夾中尋找某個關(guān)鍵詞,然后把輸出結(jié):let:let&grepprg='grep-Rn$*:grep!<grepoutput-hit"foo的文件名以及匹配到的相關(guān)字段都Vim中錄制一系列按鍵,并把他們存儲到寄存器中。對于一些需要臨時使用多Vim腳本來實現(xiàn)。q,然后按下你想要保存的寄存器,任何小寫字母都可以。比如我們來把qqq"recording@q"

"abc"

然 然 ^A0yfjP0^A10001000行。但更好的方式是使用「遞0yfjP0^A@q現(xiàn)::%s/^/\=line('.').'.')。:h:h:hVim變得更漂亮。Vim是由多個組件構(gòu)成的,我們可以給每一個組:highlight:highlightNormalctermbg=1執(zhí)行后你會發(fā)現(xiàn),現(xiàn)在背景顏色變成紅色了。請參 來獲取更多幫助:h其實,顏色主題就是一系列 命令的集合:hxtermiTerm這樣的終端環(huán)境(cterm),gvimMacVim的圖形界面環(huán)境(gui)。對于上面的例子,ctermbg就是針對終端環(huán)境的,而

第二種情況(圖形界面環(huán)境的顯示問題)其實不難解決。如果你使用的是Neovim或者Vim7.4.1830的后續(xù)版本,可以通過打開真彩色設(shè)置來解決顯示問題。這就可以讓終端VimGUI比如:h:h主題列表自定義主題中的顏色?它們可以按照一定的邏輯分割成不同區(qū)域。Vim中的折疊功能,就是按照特定的邏輯把文Vim6zf、zF:fold根據(jù)特定的文本標記折疊(通常用于代碼注釋if注意:折疊功能可能會顯著地影響性能。如果你在使用折疊功能的時候出現(xiàn)了打字卡頓sd插件m按需更新折疊內(nèi)容,而不是一直調(diào)用。:h:h:h如果你保存了當前的「視圖」(:h:mkview),那么當前窗口、配置和按鍵映射都會被保存下來(請參閱:h:loadview)。Vim:mksessionFoo.vim。如果你沒有指定文Session.vim。這個文件會保存在當前的目錄下,你可以通過Vim:sourceFoo.vim,就可以恢復剛才的會話:vsVimVim:vsVim會話中究竟要保存哪些配置,只需要設(shè)置一下為了方便開發(fā),Vim

:h:h:h:h以上提到的很多概念,都有一個局部化(非全局):hlocal-:map:h:map-:autocmd*:hautocmd-:h:hVimscripting的文檔Vim自帶了一套很完善的幫助文檔,它們是一個個有固定排版格式的文本文件,通過標簽在開始之前先讀一下這個章節(jié)::help:help文件并跳轉(zhuǎn)到這個文件 標簽的位置用單引號把文本包起來表示選項,如::hVimL函數(shù),如::h以英文冒號開頭表示命令,如::h

(這是ctrld)如::htab<c-d

(注:根據(jù)安裝的插件不同列出的選項也會不同)VimL方法嗎?很簡單,只要輸入::h()<c-d就可以了。你想查看所有與窗口相關(guān)的函數(shù)嗎?輸入:hwin*()<c-d>。 :helpgrep:helpgrep:cp/:cp/換?;蛘?命令來打開全局位置信息表,將光標定位到你想要的位置,再按回:hquickfix獲取離線幫助(補充vim_dev@chrisbraVim開發(fā)人員中最活躍的一Vim版本的所特有特性,而網(wǎng)上那些已經(jīng)過(譯者注:下面列表中提及的都是如何指定搜索主題以便快速準確的找到你想要的幫助:h:h

:h這么一個選項的時候才可以這么做,不然的話你可以:h的幫助頁面,再用正則表達式進行搜索,如:/width:hcpo-間,如::hcpo-a,:hcpo- 等等:hcpo-:h普通模式的命令不能用冒號作為前綴。使 :h:h :h組合鍵經(jīng)常以一個字母開頭表示它們可以在哪些模式中使用。如::hi_CTRL-X會帶你CTRL-X命令的用法幫助頁面,這是一個自動完成類的組合鍵。需要ControlCTRL。還有,查找普通模式下的組合鍵幫助時,可以省略開頭的字母“n”,如::hCTRL-A:hc_CTRL-A(譯者注::hc_CRTL-RA更符合上下文語境)CTRL-A在命令模式下輸入命令時的作用;:hv_CTRL-A說的是在可見模式下把光標所在處的數(shù)字加1;:hg_CTRL-Ag命令("g的命令)"g代表一個普通"z"開始的命令相似。"quote開頭的。如::hquote(譯者注:原文為:hquote,感覺作者想:hVim腳本(VimL):h

:hexpr-:hfunction-'X':hexpr-:hfunction-:hmapmode-:hmapmode-

:h:h

來查找專門針對映射的幫助(譯者注:topic:hmap-'X一樣,在實際使用中需要替換成相應的單詞)(如::h:map-local查buffer的映射,:hmap-bar查詢?nèi)绾卧谟成渲刑幚?|'):hmap-:hcommand-命令定義用"command-"開頭,如 :hcommand-:hCTRL-:hCTRL-

:h助(譯者注:'*'同樣為占位符)(如::hCTRL-W_p:h執(zhí)行類的命令以":"開頭,即::h:s":s"

CTRL-DVim:h:h

打開。在打開的窗口中可能通過/對搜索結(jié)果進行進一步的過濾。:h:h:h:h24章看到關(guān)于“復合字符”以及“輸入特殊字符”的講解:h( 可以快速打開相關(guān)章節(jié)):h高亮分組的幫助 開頭。如::hhl-WarningMsg說的是警告信息分組的高亮語法高亮以:syc開頭,如::h:syn-conceal講的是

:h BufWinLeave自動命令。還有,:hautocommand-events(譯者注:原文是:hautocommands-events,但是沒有該幫助)講的是所有可用的事件。:h啟動參數(shù)都以“-”開頭,如::hfVim“-f”額外的特性都以“+”開頭,如::h+conceal:h錯誤代碼可以在幫助系統(tǒng)中直接查到。:hE297會帶你到關(guān)于這一錯誤的詳細解釋。但Vim命令,如:h(譯者注:原文為:hhE128,但是并沒有該幫助)會直接跳轉(zhuǎn) 命令:hft-*-syntax。如::hft-c-syntax說的C語言語法文件以及它所提供的選項。有的語法文件還會帶有自動完成(:hft-php-omni)或文件類型插件(:hft-tex-plugin)另外在每個幫助頁的頂端通常會包含一個用戶文檔鏈接(:h:h角命令的功能和用法,不涉及那么多細節(jié))。如::hpattern.txt里包含了 :h:hVim使用Freenode上的

VimBugvim_dev你可以觸發(fā)任何事件,如::doautocmdBufReadfunction!function!"Alotofstuffishappeninghere."Andatlast..doautocmdUserChibbyExitChibbyautocmdautocmdUserChibbyExitcall

silentdoautocmdechomatchingsilentdoautocmdecho

unsilentechounsilentechoififexists('#User#ChibbyExit')doautocmdUserChibbyExit幫助文檔::hVimvimrcautocmdautocmdVimEnter*editVimvimrc文件,但是你很快會注意到這個文件沒

考::auBufRead*.vimautocmdautocmdVimEnter*nestededit幫助文檔::hautocmd-GUIUnixVim

以及可選 兩個特性支持:h:h:hgui-:hgui-另外請參考:持續(xù)粘貼('paste剪貼板的使用(Windows,Windows自帶了剪貼板,OSX則帶了一個ctrl+c/ctrl+c/ctrl+v/ctrl+v/每次復制的時候,都會向剪貼板寄存器*中寫入數(shù)據(jù)。而在Vim中分別使用 來進行復制(yank)和粘貼(paste)。*vimrcsetset通常情況下復制/刪除/*寄yp就可以復制粘貼了。我再說一遍:使用上面的選項意味著每一次的復制/Vim窗口里,都setsetclipboard=unnamed,autoselectsetguioptions+=a:h:hclipboard-:h:h剪貼板的使用(Linux,BSDX圖形界面,事情會變得有一點不同。XX窗口系統(tǒng)協(xié)議,198711XX11。X10版本中,剪貼緩沖區(qū)clipboardX來復制文本,并且可以被X近年來數(shù)據(jù)在程序之間是通過選擇PRIMARYCLIPBOARDProgramProgramProgramA:聲稱對CLIPBOARDProgramProgramB:發(fā)現(xiàn)CLIPBOARD的所有權(quán)被ProgramA持有ProgramB:從ProgramA請求數(shù)據(jù)ProgramA:響應這個請求并發(fā)送數(shù)據(jù)給ProgramBProgramB:從ProgramAVim鼠標中鍵*+注意:X服務器并不會保存選擇(CLIPBOARD選擇)!程序后,你 復制的內(nèi)容將丟失

PRIMARY

CLIPBOARDsetsetset*(^用來將設(shè)置的值加到默認值之前,詳見::h這會使得所有復制/刪除/*"。之后你ypX選擇了。:h:hclipboard-:hclipboard-vimrcautocmdautocmdBufReadPost\ifline("'\"")>1&&line("'\"")<=line("$") exe"normal!g`\""\這是通過判斷之前的光標位置是否存在(viminfo文件::hviminfo-

(Vim4VimVim會保存一個備份文件但是當修改成功寫入后會立即刪除它(:setwritebackup)。如果你想一直保留這個備份文件的話,可以使用:setbackup。而如果你想禁用備份功能的話,可以使用:set:setnobackupnowritebackupvimrc$$diff~/.vim/vimrc~/.vim/files/backup/vimrc-vimbackup<command!-bar-nargs=*-complete=helpHhelpgrep幫助文檔::h

是在Vim:set是對當前文件所有未保存的修改。自己試一下,打開任意的文件,并使:set

vimrc默認情況下,交換文件會自動保存在被編輯文件所在的目錄下,文件名 后2004秒內(nèi)沒有任何動作時更新它的內(nèi)容,見::h'updatecount:h'updatetime'vim~/來自外太空的邪惡入侵者vim~/來自外太空的邪惡入侵者:hVim會提示你恢復這個文件。幫助文檔::hswap-file和:h內(nèi)容變更歷史記錄Vim到磁盤中,可以設(shè)置:setundofile。這會把文 的撤銷文件保存在~/foo.c.un~:hundo-幫助文檔::h'undofile:hundo-viminfoviminfo文件是用來保存在Vim退出時可能會丟失的其它的信息的。包括歷史記錄(命令歷史、搜索歷史、輸入歷:h默認情況下,viminfo~/.viminfo。幫助文檔::hviminfo和:hif!isdirectory($HOME.'/.vim/files')&&exists('*mkdir')callmkdir($HOME.'/.vim/files')setsetbackupsetbackupdirsetbackupextsetbackupskip"交換文件setsetupdatecountsetsetviminfosetVim提示你交換文件已經(jīng)存在的homeHOMEVimnetrwscp復制到VIMSSH遠程服務器上管理員想讓你使用的配置有沖突時:e:e~/.ssh/config,SSHHostHostHostNPort1234User如果你 中有以上的內(nèi)容,那么下面的命令就可以正常執(zhí)行了:e:e~/.netrc,詳見::hnetrc-netrc:hnetrw-ssh-:hnetrw-ssh-:hg:netrw_ssh_cmdsshfsFUSE來掛載遠程的文件系統(tǒng)到你本(:h'rtp')Vim中提供幫助你安裝或更新插件的命令。以下是一些常用的deinplugvim-addon-managervundle這是一種可以同時輸入多行連續(xù)文本的技術(shù)。參考這個示例 切換到可視塊模式。然后向下選中幾行,按I或A(譯者注:大寫字母,shift+ishift+a)舉一個簡單的例子:<c-v>3jItext<esc>過設(shè) 選項達到目的setset

:hblockwise-examples。在開始的時候可能會覺得有些復雜,但是它很快就會成為你如果你想探索更有趣的事情,可以看看免責聲明:VimVim中以前端進程執(zhí)行其它的程序時會阻止其它的Vim的處理還是被阻止了。NeovimAPI解決了此問題。以看一下:helpgrepstartjob。)使 啟動一個新任務。如果你想列出當前工作目錄下的所有文件,可以使用:!ls。|來將結(jié)果通過管道重定向,如::!ls-l|sort|tail-n5沒有使用范圍時(之間的內(nèi)容,表示當前行,+4移4行,$表示最末行等,多行時用,將它們分開, 表示從當前行到末行會顯示在一個可滾動的窗口中(GVim和在終端里運行的結(jié)果稍有不同)。stdinstdout輸出,用輸出結(jié)果替換范圍內(nèi)的文本。例5行文本添加行號,可以使用::.,+4!nl:.,+4!nl-ba-w1-s'Vim提供了一些輔助方法以方便的添加范圍。如果需要經(jīng)常(便)motion

(Vim版本的原因造成的,新版本使用動添加!)可以將當前段落的所有行按字母表順序進行排序。一個使用過濾器比較好的案例是Go語言

Go語言的源文件進行正確的縮進。Go

:r:r

prog擇,但是在使用的過程中我發(fā) 更加方便,它會用輸出結(jié)果替換當前行的內(nèi)容(:r!ls:h:h:h:h

CscopectagsC(cscope.filesTag文件只是知道某個符號是在哪里定義的,cscope的數(shù)據(jù)庫里的數(shù)據(jù)信息就多的符號是在哪里定義的?符號是在哪里被使用的?這個全局符號定義了什么?這個變量是在哪里被賦值的?這個函數(shù)在源文件的哪個位置?哪些函數(shù)調(diào)用了這個函數(shù)?這個函數(shù)調(diào)用了哪些函數(shù)?"outofspace"消息是從哪來的?在目錄結(jié)構(gòu)中當前的源文件在哪個位置?哪些文件引用了這個頭文件?$$cscope-這條命令會在當前目錄下創(chuàng)建三個文件:cscope{,.in,.po}.out。把它們想象成你的數(shù)據(jù)

Javacscope$$find.-name"*.java">$cscope-:cs:csadd:cs:cs(當然你可以添加多個連接。:cs:csfind<kind>如::csfinddfoo會列 調(diào)用的所有函數(shù)egrepegrepnnoremapnnoremap<buffer><leader>cs:cscopefinds<c-r>=expand('<cword>')<cnnoremap<buffer><leader>cg:cscopefindg<c-r>=expand('<cword>')<cnnoremap<buffer><leader>cc:cscopefindc<c-r>=expand('<cword>')<cnnoremap<buffer><leader>ct:cscopefindt<c-r>=expand('<cword>')<cnnoremap<buffer><leader>ce:cscopefinde<c-r>=expand('<cword>')<cnnoremap<buffer><leader>cf:cscopefindf<c-r>=expand('<cfile>')<cnnoremapnnoremap<buffer><leader>cf:cscopefindf<c-r>=expand('<cfile>')<cnnoremap<buffer><leader>ci:cscopefindi^<c-r>=expand('<cfile>')<cnnoremap<buffer><leader>cd:cscopefindd<c-r>=expand('<cword>')<c

(<c-]>)

cscope的數(shù)據(jù)庫連接。'cscopetag選項使得

幫助文檔::hVimCC下,如果你的光標在{ ,就可以使用%跳轉(zhuǎn)到與之匹配的}或#ifdefVimmatchit.vimVimLif/else/endifVim8""vimrcpackadd!matchitVim7runtimematchit:!mkdir:!mkdir-p:!cp$VIMRUNTIME/macros/matchit.vim:helptags:h:hmatchit-:hmatchit-:hmatchit-

autocmdautocmdFileTypepythonletb:match_words=Python(向前)或

(向后):h:hmatchit-:h:hvVoO:h:h:hn 的實際跳轉(zhuǎn)方向取決于使用/還是?來執(zhí)行搜索,其中/是向后搜索,?是前搜索。一開始我(原作者)

Nnnoremapnnoremap<expr>n'Nn'[v:searchforward]nnoremap<expr>N我(原作者)

:echo,這時候我們按:echo"Vimrocks!"(前提是,之前輸入過這段命令)。當然,Vim用戶都不愿意去按方向鍵,事實上我們也不需要去按,只需要設(shè)置這樣的映cnoremapcnoremap<c-n><down>cnoremap<c-p><up>這個功能,我(原作者)Ctrl-+l

/?匹配字符的高亮,而且還可以修復代碼高亮問題(有時候,由于多個代碼高亮的腳本重疊,或者規(guī)則過于復雜,Vim的代:helpdiff-mode)nnoremapnnoremap<leader>l:nohlsearch<cr>:diffupdate<cr>:syntaxsyncsetsetnoerrorbellssetnovisualbellsett_vb=VimWikiDisablebeeping有時,我(原作者)nnoremapnnoremap[e:<c-u>execute'move-1-'.v:count1<cr>nnoremap]e:<c-u>execute'move+'.v:count1<cr>

nnoremapnnoremap[<space>:<c-u>put!=repeat(nr2char(10),v:count1)<cr>'[nnoremap]<space>:<c-u>put=repeat(nr2char(10),v:count1)<cr>

5Vim:profilestart:profilestart:profilefile:profilefunc<dosomethingin<quitVim不斷地在內(nèi)存中檢查信息,只在退出的時候輸出出來。(Neovim:profile題:profile

FUNCTIONSSORTEDONFUNCTIONSSORTEDONTOTALFUNCTIONSSORTEDONSELFfunctionVimvimvim--startuptime/tmp/startup.log+q&&vimVimL代碼。NULNUL(\0),在內(nèi)存中被以新行(\n)^@man7:hNL-used-for-man7:hNL-used-for-這個功能真的很實用!下面的映射,就是在一個新的命令行窗口中讀取某一個寄存器(認為*)。當你設(shè)置完成后,只需要按 即可讓它生效nnoremapnnoremap<leader>m:<c-u><c-r><c-r>='let@'.v:register.'='.:h

快速跳轉(zhuǎn)到源(頭)

'這個技巧可以設(shè)置「文件標記」(請參閱:hmarks''或 快速跳轉(zhuǎn)回去(請參閱:h'A)'autocmdautocmdBufLeave*.{c,cpp}markCautocmdBufLeave mark:setviminfo:set

:hviminfo-':hviminfo-'GUI印象中,我(原作者)tpope'scommand!command!Bigger:let&guifont=substitute(&guifont,'\d\+$','\=submcommand!Smaller:let&guifont=substitute(&guifont,'\d\+$',我(原作者)習慣在普通模式下用塊狀光標,在插入模式下用條狀光標("I的樣子),ififlet&t_SI="\<Esc>]50;CursorShape=1\x7"let&t_EI="\<Esc>]50;CursorShape=0\x7"let&t_SR=let&t_SI="\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"let&t_EI="\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"let&t_SR="\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=2\x7\<Esc>\\"sequence。Vim與終端之間的中間層,比如tmux會處理并執(zhí)行上面的代碼。Vim運行環(huán)境的文檔。iTerm2

你可以連續(xù)按 來重新選中他們,請參考:hgv。因此,你可以這樣來配置映射xnoremapxnoremap<<gvxnoremap>設(shè)置好之后,在可視模式中使 就不會再出現(xiàn)上面提到的問題了Vim

hVim

vg_。當然,如果覺得按nnoremapnnoremapL這樣就可以通 達到一樣的效果了autocmdautocmdBufWritePost$MYVIMRCsourceautocmdBufWritePost~/.Xdefaultscallsystem('xrdb我(原作者)很喜歡「當前行高亮」(:hcursorline)這個功能,但我只想讓這個autocmdInsertLeave,WinEnter*setcursorlineautocmdautocmdInsertLeave,WinEnter*setcursorlineautocmdInsertEnter,WinLeave*setnocursorline關(guān)鍵字補全(<c-n<c-p>)

setcomplete-=i "setcomplete-=i "disablescanningincludedfilessetcomplete-=t "disablesearchingtagsautocmdautocmdColorScheme*highlightStatusLinectermbg=darkgrayautocmdautocmdColorSchemeluciushighlightStatusLinectermbg=darkgray:echo:echo:h:<command:h:<command:global/regexp/:global:global/regexp/

命令(譯者注:regexp達式,在所有符合正則表達式的行上執(zhí)行指定的命令)grepKenThompson編寫的過濾程序。它是:global/regexp/:global/regexp/

oKenThompsomgrep

的啟發(fā)。(:global

命令刪除從當前行到下一個空行(

匹配)"fooVinVerse):normal:execute-Vim

或是它的別

可以在命令行里進行普通模式的映射。如::normal4j4:h:h:normal-:h:h:normal-:%norm!:%norm!

"abc"。

C:execute:execute'edit'fnamemodify(expand('%'),':r').(

expand得當前文件的名稱,fnamemodify'.h就是頭文件的文edit命令打開這個頭文件。)n:let:letn=:execute'normal!'n.許多命令都會輸出消息,:redir用來重定向這些消息。它可以將消息輸出到文件、將消息重定向到變量`neatvar`:redir=>:redirEND"輸出變量:echo:putVim8:put:put:put:putneovim/vim8下沒問題)幫助文檔::h:redir

但是實際會報變量未定義的錯誤)(vimvim-uNONE-:h--(vimvi:h--

命令了解更多啟動加載方式vimbugvim_dev發(fā)送郵件:verbau:verbauoptionsautocmd等等。

vimrc文件中間,Vim的設(shè)置。如果問題還在,那么問題就出在:finish之前的設(shè)置中,再把:finish放到前一部分設(shè)置的中間位置。否則問題就出現(xiàn)在它后面的半部分設(shè)置,那么就把:finish放到后半部分Vimdebug9個等級,可以用:h'verbose':e:e:set:set1.

:verb:verbsetverbose"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論