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

下載本文檔

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

文檔簡(jiǎn)介

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

、python3、luapython、luaGithub

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

在第一周準(zhǔn)備備忘錄通讀基礎(chǔ)Vim按需學(xué)習(xí)!Vim是學(xué)不完的。如果你遇到了問題,先上網(wǎng)尋找解決方案,你的問題可能已經(jīng)被解決了。Vim擁有大量的參考文檔,知道如何利用這些參考文檔很有必要:瀏覽附加資源最后一個(gè)建議:使用插件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,當(dāng)這一文件不存在Vim2nduservimrcfile:$HOME\vimfiles\vimrc;倘若這個(gè)文件還是不存在,Vim3rduservimrcfile:$VIM\_vimrcVim總是不讀取配置文件而感到煩惱了。LinuxMacWindows

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

VimIncludedpatches1-1051Vim7.4.1051TinyTinyversionwithout

HugeversionwithVimHugeversionwith

Vim

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

Vimvim-x,vim-x11,vim-gtk,vim-gnome這些包或者相似的,因?yàn)檫@些包通常都是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是一個(gè)文本編輯器。每次文本都是作為緩沖區(qū)的一部分顯示的。每一份文件都是在(標(biāo)簽)Vim的時(shí)候沒有附帶任何參數(shù),你會(huì)得到一個(gè)包含著一個(gè)呈現(xiàn)一?vimvim

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

命令加載另一個(gè)文件,file1

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

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

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

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

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

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

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

:h:h

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

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

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

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

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

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

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

`

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

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

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

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

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

:h:h

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

:h:h

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

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

Vim

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

:h:h:hVim

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

"bar

"foo

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

g+

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

"abc"

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

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

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

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

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

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

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

:h:h

來查找專門針對(duì)映射的幫助(譯者注:topic:hmap-'X一樣,在實(shí)際使用中需要替換成相應(yīng)的單詞)(如::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

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

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

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

silentdoautocmdechomatchingsilentdoautocmdecho

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

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

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

PRIMARY

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

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

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

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

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

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

Go語(yǔ)言的源文件進(jìn)行正確的縮進(jìn)。Go

:r:r

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

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

Javacscope$$find.-name"*.java">$cscope-:cs:csadd:cs:cs(當(dāng)然你可以添加多個(gè)連接。:cs:csfind<kind>如::csfinddfoo會(huì)列 調(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ù)庫(kù)連接。'cscopetag選項(xiàng)使得

幫助文檔::hVimCC下,如果你的光標(biāo)在{ ,就可以使用%跳轉(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 的實(shí)際跳轉(zhuǎn)方向取決于使用/還是?來執(zhí)行搜索,其中/是向后搜索,?是前搜索。一開始我(原作者)

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

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

/?匹配字符的高亮,而且還可以修復(fù)代碼高亮問題(有時(shí)候,由于多個(gè)代碼高亮的腳本重疊,或者規(guī)則過于復(fù)雜,Vim的代:helpdiff-mode)nnoremapnnoremap<leader>l:nohlsearch<cr>:diffupdate<cr>:syntaxsyncsetsetnoerrorbellssetnovisualbellsett_vb=VimWikiDisablebeeping有時(shí),我(原作者)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)存中檢查信息,只在退出的時(shí)候輸出出來。(Neovim:profile題:profile

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

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

'這個(gè)技巧可以設(shè)置「文件標(biāo)記」(請(qǐng)參閱:hmarks''或 快速跳轉(zhuǎn)回去(請(qǐng)參閱: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\+$',我(原作者)習(xí)慣在普通模式下用塊狀光標(biāo),在插入模式下用條狀光標(biāo)("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會(huì)處理并執(zhí)行上面的代碼。Vim運(yùn)行環(huán)境的文檔。iTerm2

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

hVim

vg_。當(dāng)然,如果覺得按nnoremapnnoremapL這樣就可以通 達(dá)到一樣的效果了autocmdautocmdBufWritePost$MYVIMRCsourceautocmdBufWritePost~/.Xdefaultscallsystem('xrdb我(原作者)很喜歡「當(dāng)前行高亮」(:hcursorline)這個(gè)功能,但我只想讓這個(gè)autocmdInsertLeave,WinEnter*setcursorlineautocmdautocmdInsertLeave,WinEnter*setcursorlineautocmdInsertEnter,WinLeave*setnocursorline關(guān)鍵字補(bǔ)全(<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達(dá)式,在所有符合正則表達(dá)式的行上執(zhí)行指定的命令)grepKenThompson編寫的過濾程序。它是:global/regexp/:global/regexp/

oKenThompsomgrep

的啟發(fā)。(:global

命令刪除從當(dāng)前行到下一個(gè)空行(

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

或是它的別

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

"abc"。

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

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

但是實(shí)際會(huì)報(bào)變量未定義的錯(cuò)誤)(vimvim-uNONE-:h--(vimvi:h--

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

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

:verb:verbsetverbose"

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論