vim note(6)--vim的一個較全的介紹(轉)
vim的配置檔案
~/.vimrc 使用者的預設配置檔案 ~/.vim/plugin/ 使用者的預設指令碼檔案的存放目錄 ~/.vim/ftplugin/ 使用者的預設檔案型別相關指令碼檔案的存放目錄
vim提供的程式設計支援
文字資訊(行號、檔名等) 程式碼縮排 語法高亮 快速定位 標記位置 全文搜尋 補全 多檔案編輯 多視窗編輯 函式列表 檔案列表 函式跳轉 語法錯誤 字符集的編碼 二進位制檢視
等等...
初試vim
在終端以root啟動 輸入vim命令 顯示vim首頁
:r filename 讀入一個檔案內容,並寫入到當前編輯器中
按i進入插入模式
編輯完後:w儲存
編輯完後按esc退出插入模式 進入正常模式
然後輸入:sh進入shell
編譯執行
文字資訊配置
set nu(寫入配置檔案.vimrc中) 顯示行號。 ctrl-g(正常模式下使用命令) 顯示檔案資訊和當前行。 statusline.vim(外掛) 增加底部狀態列。
程式碼縮排配置
filetype on(寫入配置檔案.vimrc中) 使vim對檔案型別敏感。 autocmd FileType c,cpp,h :setlocal cindent cinoptions=:0,g0,t0(寫入配置檔案.vimrc中) 設定c縮排風格,具體詳情參見:h cinoptions-values。 autocmd FileType c,cpp,h :setlocal et sta sw=4 sts=4 tabstop=4(寫入配置檔案.vimrc中) 設定一次縮排的距離是4個空格。 =(正常模式或者可視模式下使用命令) 按照縮排風格排版程式碼。 <(可視模式下使用命令) 向左縮排一級。 >(可視模式下使用命令) 向右縮排一級。
語法高亮
filetype plugin on(寫入配置檔案.vimrc中) 通常安裝的vim中已經加入了各種語言的語法高亮外掛,我們只需要開啟檔案型別相關的外掛就可以了。
快速定位
gd(正常模式下使用命令) 跳轉到區域性變數定義處。 gD(正常模式下使用命令) 跳轉到全域性標量定義處。 *(正常模式下使用命令) 搜尋並跳到下一個游標所在的單詞。 g*(正常模式下使用命令) 功能接近*,但是查詢的目標不帶\<和\>單詞分界符號。 #(正常模式下使用命令) 搜尋並跳到上一個游標所在的單詞。 g#(正常模式下使用命令) 功能接近#,但是查詢的目標不帶\<和\>單詞分界符號。
標記位置
m{a-zA-Z0-9} (正常模式下使用命令) 在當前位置製作一個標記,標記名字可以使用a-z或者A-Z之間的任意字元,例如輸入ma,就是將當前位置標記為a標記。注意a-z為單檔案標記,不可跨檔案使用,而A-Z0-9為全域性標記,可以跨檔案使用。 ‘{a-zA-Z0-9} (正常模式下使用命令) 跳轉到本檔案的標記上。 :marks [{a-zA-z0-9}] (正常模式下使用命令) 檢視指定標記的內容,不寫標記號則檢視所有。 :delm {a-zA-z0-9} (正常模式下使用命令) 刪除一個標記。
全文搜尋
:vimgrep(正常模式下使用命令) 全文搜尋,功能同grep命令,但是支援在vim進行多檔案跳轉定位。 使用方法:vimgrep 正則表示式 檔案。檔案支援萬用字元,例如*.c代表所有的.c檔案。如果希望遞迴搜尋,可以使用**/*,表示搜尋所有的檔案。 :cl 列舉結果 :cc(正常模式下使用命令) 當前結果 :cn(正常模式下使用命令) 下一個結果 :cp(正常模式下使用命令) 上一個結果 :cw(正常模式下使用命令) 重新開啟搜尋結果視窗
多檔案編輯
vim f1 f2 …… fn(在shell下使用命令) 開啟多個檔案。 :e 檔名(正常模式下使用命令) 在vim中開啟新檔案。 :ls(正常模式下使用命令) 所有開啟檔案列表。 :bn(正常模式下使用命令) 到下一個檔案。 :bp(正常模式下使用命令) 到上一個檔案。 :b# 或 ctrl-6(正常模式下使用命令) 到最近的前一個檔案。 set autowriteall(寫入配置檔案.vimrc中) 如果討厭每次開啟新檔案,vim喋喋不休的要求你儲存,那麼可以設定自動儲存。
多視窗編輯 :sp 檔名(正常模式下使用命令) 橫向拆分視窗(多行視窗)。 :vsp 檔名(正常模式下使用命令) 縱向拆分視窗(多列視窗)。 ctrl-w h(正常模式下使用命令) 將游標移動到左一個視窗。 ctrl-w j(正常模式下使用命令) 將游標移動到下一個視窗。 ctrl-w k(正常模式下使用命令) 將游標移動到上一個視窗。 ctrl-w l(正常模式下使用命令) 將游標移動到右一個視窗。 ctrl-w +(正常模式下使用命令) 當前視窗尺寸變大。 ctrl-w -(正常模式下使用命令) 當前視窗尺寸變小。 ctrl-w o(正常模式下使用命令) 只顯示當前視窗。
函式列表 taglist.vim(外掛) 列表外掛。 let Tlist_Use_Right_Window = 1(寫入配置檔案.vimrc中) 如果希望列表在右側顯示,則加入這個配置,預設是左側。 :Tlist(正常模式下使用命令) 顯示函式列表。 d(在taglist視窗下使用) 從列表中刪除檔案。 +(在taglist視窗下使用) 展開檔案。 -(在taglist視窗下使用) 摺疊檔案。 =(在taglist視窗下使用) 摺疊所有檔案。 x(在taglist視窗下使用) 顯示或隱藏正常視窗。
檔案列表 NERD_tree.vim(外掛) 橫向拆分視窗(多行視窗)。 let NERDTreeWinPos = 'right'(寫入配置檔案.vimrc中) 如果希望檔案樹在右側顯示,則加入這個配置,預設是左側。 :NERDTree(正常模式下使用命令) 顯示檔案列表。
函式跳轉 ctags(軟體,需要另外安裝) 生成多種語言tag檔案的軟體。 Ctags –R *.c(在shell下使用命令) 生成當前路徑所有.c檔案的tag,-R代表遞迴。 :ta 標記 或 [g] ctrl-] 列舉標籤(多個標籤)或者跳轉到標籤(單個標籤)。 ctrl-t 返回上一級。 :tags 列出標籤棧。
語法錯誤 :make(正常模式下使用命令) 執行外部make命令,並且顯示所有的編譯警告和錯誤,並且可以在vim中定位。 :cl 列舉結果 :cc(正常模式下使用命令) 當前結果 :cn(正常模式下使用命令) 下一個結果 :cp(正常模式下使用命令) 上一個結果 :cw(正常模式下使用命令) 重新開啟搜尋結果視窗
二進位制檔案檢視 (鑑於有同學理解出現分歧 將二進位制檢視更新為二進位制檔案檢視)
:範圍!xxd(正常模式下使用命令) 把指定範圍的部分轉化為二進位制檔案閱讀方式。 :範圍!xxd -r(正常模式下使用命令) 把指定範圍的部分轉回字元閱讀方式。
字符集的編碼 let &termencoding=&encoding set fileencodings=utf-8,gbk,cp936(寫入配置檔案.vimrc中) 加入多種字元編碼支援。 :set fileencoding(正常模式下使用命令) 設定檔案字元編碼。
補充
ctrl-p(插入模式下使用命令) 跳出補全選單。 ctrl-n(在跳出補全選單後) 下一個結果。 ctrl-p(在跳出補全選單後) 上一個結果。 ctrl-y(在跳出補全選單後) 選擇當前結果。 ctrl-x ctrl-f(插入模式下使用命令) 檔名補全。 ctrl-x ctrl-i(插入模式下使用命令) 包含的標頭檔案。 ctrl-x ctrl-](插入模式下使用命令) ctags(將在下文中介紹)符號補全。 ctrl-x ctrl-o(插入模式下使用命令) omni補全,需要設定omnifunc變數。
vim其他命令 (參考vi(vim)教程)
開啟檔案、儲存、關閉檔案:
vi filename //開啟filename檔案 :w //儲存檔案 :w vpser.net //儲存至vpser.net檔案 :q //退出編輯器,如果檔案已修改請使用下面的命令 :q! //退出編輯器,且不儲存 :wq //退出編輯器,且儲存檔案
插入文字或行:
a //在當前游標位置的右邊新增文字 i //在當前游標位置的左邊新增文字 A //在當前行的末尾位置新增文字 I //在當前行的開始處新增文字(非空字元的行首) O //在當前行的上面新建一行 o //在當前行的下面新建一行 R //替換(覆蓋)當前游標位置及後面的若干文字 J //合併游標所在行及下一行為一行(依然在命令模式)
移動游標:
使用上下左右方向鍵
命令模式下:h 向左、j 向下 、k 向上、l 向右。 空格鍵 向右、Backspace 向左、Enter 移動到下一行首、- 移動到上一行首。
刪除:
x //刪除當前字元 nx //刪除從游標開始的n個字元 dd //刪除當前行 ndd //向下刪除當前行在內的n行 u //撤銷上一步操作 U //撤銷對當前行的所有操作
搜尋:
/vpser //向光標下搜尋vpser字串 ?vpser //向光標上搜索vpser字串 n //向下搜尋前一個搜素動作 N //向上搜尋前一個搜尋動作
跳轉:
n+ //向下跳n行 n- //向上跳n行 nG //跳到行號為n的行 G //跳至檔案的底部
設定行號:
:set nu //顯示行號 :set nonu //取消顯示行號
複製:
yy //將當前行復制到快取區,也可以用 "ayy 複製,"a 為緩衝區,a也可以替換為a到z的任意字母,可以完成多個複製任務。 nyy //將當前行向下n行復制到緩衝區,也可以用 "anyy 複製,"a 為緩衝區,a也可以替換為a到z的任意字母,可以完成多個複製任務。 yw //複製從游標開始到詞尾的字元。 nyw //複製從游標開始的n個單詞。 y^ //複製從游標到行首的內容。
y$ //複製從游標到行尾的內容。 p //貼上剪下板裡的內容在游標後,如果使用了前面的自定義緩衝區,建議使用"ap 進行貼上。 P //貼上剪下板裡的內容在游標前,如果使用了前面的自定義緩衝區,建議使用"aP 進行貼上。
替換:
:s/old/new //用new替換行中首次出現的old :s/old/new/g //用new替換行中所有的old :n,m s/old/new/g //用new替換從n到m行裡所有的old :%s/old/new/g //用new替換當前檔案裡所有的old
編輯其他資源:
:e otherfilename //編輯檔名為otherfilename的檔案。
修改檔案格式:
:set fileformat=unix //將檔案修改為unix格式,如win下面的文字檔案在linux下會出現^M。
客串答案
c傳遞引數都是值傳遞的,指標的一個作用是為了解決實現類似引用的效果,另外,使用指標可以直接操作記憶體!
孫鶴同學的解釋:
每個執行緒有固定大小的棧,通常主執行緒的棧預設一般是8M,用指標去引用記憶體,往往是在使用堆記憶體,棧是有限的,並且受生存期影響,所以用堆的情況要比用棧更多,有些東西生存期很長,超過一個函式的呼叫,那麼就需要用堆記憶體。
本篇到此 希望對大家有幫助
下載地址:http://www.vim.org/scripts/script.php?script_id=273 “Tag List" 外掛是一個為VIM編寫的原始碼瀏覽外掛,需要ctags的支撐 ,直接可以在左邊列出函式列表,全域性引數列表,巨集。(可以排序) 1、下載taglist.zip檔案,解壓到$HOME/.vim目錄下,或者$HOME/vimfiles或$VIM/vimfiles目錄下,在這一步後,你應該有這兩個檔案(目錄結構應該被保留) plugin/taglist.vim - taglist 外掛檔案 doc/taglist.txt - 文件(幫助)檔案 2. 進入 $HOME/.vim/doc 或者 $HOME/vimfiles/doc 或者 $VIM/vimfiles/doc 目錄, 執行Vim,在命令列模式下執行 ":helptags ." 命令處理taglist幫助檔案,如果沒有這上步,你將不能得到taglist幫助提示 3、如果ctags工具不在你的PATH搜尋路徑中,你需要在$HOME/.vimrc中設定Tlist_Ctags_Cmd 變數指出ctags的路徑。 4、如果你執行的是terminal/console版本的VIM,以及terminal 不支援改變視窗的寬度,你需要在$/HOME/.vimrc設定 'Tlist_Inc_Winwidth' 變數為0, 5、重啟vim 6、你可以在vim的命令列模式中使用 ":TlistToggle" 命令開啟/關閉taglist視窗,你可以使用 ":help taglist" 命令得到更多的關於使用taglist外掛的資訊
NERDTree的安裝和使用2009-09-03 12:47NERDTree來自: http://www.vim.org/scripts/script.php?script_id=1658 A,安裝。 1,解壓後,拷貝plugin/NERD_tree.vim檔案到~/.vim/plugin下。拷貝doc/NERD_tree.txt檔案到~/.vim/doc下 2,開啟vim,載入文件。 :helptags ~/.vim/doc/NERD_tree.txt 以後檢視幫助只要 :h NERD_tree.txt 即可。 B,常用使用。 1,標籤。 1 - 1,開啟一個目錄。 :NERDTree ~/share/abc 1 - 2,標記它。 :Bookmark your_mark_name_of_abc 1 - 3,開啟這個標籤。 :NERDTree your_mark_name_of_abc 效果同 1 - 1。 2,快速幫助游標在NERDTree的目錄工作區時候,按?鍵。 |
去除高亮
方法一::nohlsearch 方法二:/awertgvcxz (查詢一個肯定不存在的字串) 設定了高亮搜尋(:set hlsearch)以後,可以通過 :set nohlsearch 永久地關閉高亮 顯示,也可以通過 :nohlsearch 暫時關閉高亮顯示,下次搜尋時將自動恢復高亮。 怎麼修改當前檔案的檔名最相近的方法是 :saveas xxx 但是原檔案還是存在的
this is the same way to same the file
then you need to delete the original file