vim 命令速查圖片
Vim 打開命令
- vim FileName -- 打開文件 FileName,並將光標置於第一行首
- vim +n FileName -- 打開文件 FileName,並將光標置於第 n 行首
- vim + FileName -- 打開文件 FileName,並將光標置於最后一行
- vim + /pattern File -- 打開文件 File,並將光標置於其中第一個於 pattern 匹配的字符串處
- vim –r FileName -- 在上次正用 vi 編輯 FileName 發生系統崩潰后,恢復FileName
- vim File1 … Filen -- 打開多個文件,依次對之進行編輯
- vim -o File1 … Filen -- 用水平分隔的方式打開多個文件然后進行編輯
- vimdiff filename1 filename2 -- 用垂直分割的方式打開兩個文件 filename1,filename2 然后顯示出兩個文件的不同的比較
插入模式
vim 補全
- <c-a> -- 重復上次的編輯動作
- <c-x><c-l> -- 整行補全
- <c-x><c-n> -- 根據當前文件里關鍵字補全
- <c-x><c-k> -- 根據字典補全
- <c-x><c-t> -- 根據同義詞字典補全
- <c-x><c-i> -- 根據頭文件內關鍵字補全
- <c-x><x-]> -- 根據標簽補全
- <c-x><c-f> -- 補全文件名
- <c-x><c-d> -- 補全宏定義
- <c-x><c-v> -- 補全 vim 命令
- <c-x><c-u> -- 用戶自定義補全方式
- <c-x><c-s> -- 拼寫建議
普通與命令行模式
移動
ctags 快捷鍵
- [{ -- 轉到上一個位於第一列的"{"
- }] -- 轉到下一個位於第一列的"{"
- { -- 轉到上一個空行
- } -- 轉到下一個空行 ([ and ] 也分別是兩個指令)
移動光標
- h -- 向右
- j -- 向下
- k -- 向上
- l -- 向左
- 0 -- 這是數字 “0”:移動到這一行的最前面字符處
- ^ -- 移動到這一行的最開始字符處
- <c-p> -- 光標上移一行
- <c-n> -- 光標下移一行
- num+ -- 光標下移到 n 行頭,若沒有 n 光標移到下行行頭
- num- -- 光標上移到 n 行頭,若沒有 n 光標移到上行行頭
- num$ -- 光標下移到 n 行尾,若沒有 n 則移動到本行行尾
- num<Enter> -- 向下移動 n 行,無 n 移動一行
- H -- 光標移動到這個屏幕的最上方哪一行
- M -- 光標移動到這個屏幕的中央哪一行
- L -- 光標移動到這個屏幕的最下方哪一行
- nG -- n 為數字.移動到這個文件的第 n 行.若沒有 n 則移動到最后一行
- gg -- 移動到這個文件的第一行,相當於 1G
屏幕滾動
- <c-f> -- 屏幕“向下”移動一頁,相當於<Page Down>按鍵
- <c-b> -- 屏幕“向上”移動一頁,相當於<Page Up>按鍵
- <c-d> -- 屏幕“向下”移動半頁
- <c-u> -- 屏幕“向上”移動半頁
- <c-e> -- 屏幕向下滾一行
- <c-y> -- 屏幕項上滾一行
- nz -- 將第 n 行滾至屏幕頂部。不指定 n 時將當前行滾至屏幕頂
- :$ -- 屏幕滾到文章最后一行
- :0 -- 屏幕滾到文章最開始一行
跳轉
- W / w -- 光標右移一個字至字首.
- B / b -- 光標左移一個字至字首.
- E / e -- 光標右移一個字至字尾.
- ( -- 光標移到上個句子句首.
- ) -- 光標移到下個句子句首.
- { -- 光標移到上個段落句首.
- } -- 光標移到下個段落句首.
- f[char] -- 光標跳轉到本行下一個字符 char 處( char 指代任意字符 )
- F[char] -- 光標跳轉到本行上一個字符 char 處( char 指代任意字符 )
- t[char] -- 光標跳轉到本行下一個字符 char 的前一個字符處( char 指代任意字符 )
- T[char] -- 光標跳轉到本行上一個字符 char 的后一個字符處( char 指代任意字符 )
- /[word] -- 光標跳轉到下一個字符串 word 處,並把所有 word 單詞高亮顯示( word 指代任意字符串,並且可以使用 正則表達式 )
- ?[word] -- 光標跳轉到上一個字符串 word 處,並把所有 word 單詞高亮顯示( word 指代任意字符串,並且可以使用 正則表達式 )
- # -- 光標跳轉到下個與光標所在處單詞相同的單詞,並把所有與光標所在處的相同的單詞高亮顯示
- * -- 光標跳轉到上個與光標所在處單詞相同的單詞,並把所有與光標所在處的相同的單詞高亮顯示
- gd -- 將與光標所在處的單詞相同的單詞全部高亮顯示,並跳轉到上一個高亮顯示的單詞
- gD -- 將與光標所在處的單詞相同的單詞全部高亮顯示,並跳轉到最前面一個高亮顯示的單詞
- `. -- 跳轉至上次編輯位置
- `c -- 將光標轉移到書簽 c 處( c 為任意字符 )
- n -- 下一個匹配(如果是/搜索,則是向下的下一個,?搜索則是向上的下一個,但其實它只會在高亮字符中切換)
- N -- 上一個匹配(同上)
操作
插入操作
- 行操作
- I -- 在光標所在行首插入文本
- A -- 在光標所在行尾添加文本
- o -- 在光標所在行下面添加一行
- O -- 在光標所在行上面添加一行
- nS -- 從當前行開始,刪除向下 n 行並進入編輯模式,若無 n 刪除當前所在行,並進入編輯模式
- 字符操作
- i -- 在光標前插入文本
- a -- 在光標后插入文本
- r -- 替換光標所在處字符,結束替換
- R -- 替換多個字符,以按下 [Esc] 鍵標志替換結束
- ns -- 從當前光標位置處開始,刪除 n 個字符並進入編輯模式,若無 n 刪除一個字符,並進入編輯模式
- :r [filename | !cmd] -- 在編輯數據中讀入一個文件內容數據或一個命令的返回結果,並把這些數據添加到光標所在行后面
復制與刪除與粘貼
- 字符操作
- nx -- 向后刪除 n 個字符,若沒有 n 向后刪除一個字符
- nX -- 向前刪除 n 個字符,若沒有 n 向前刪除一個字符
- d0 -- 那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字符
- d$ -- 刪除游標所在處,到該行的最后一個字符
- y0 -- 復制光標所在的那個字符到該行行首的所有數據
- y$ -- 復制光標所在的那個字符到該行行尾的所有數據
- p -- 將已復制的數據在光標下一列貼上
- P -- 將已復制的數據在光標上一列貼上
- 行操作
- ndd -- 刪除光標所在的向下 n 列,若沒有 n 刪除游標所在的那一整列
- dnG -- 刪除光標所在到第 n 行的所有數據,若沒有 n 刪除光標所在到最后一行的所有數據
- nyy -- 復制光標所在的向下 n 行,若無 n 復制游標所在的那一行
- ynG -- 復制游標所在列到第n行的所有數據,若無 n 復制游標所在行到最后一行的所有數據
- J -- 將光標所在列與下一列的數據結合成同一列
撤銷與重做
- . -- 重復前一個操作
- u -- 復原前一個操作
- <c-r> -- 重做上一個操作
區塊操作
- 進入標記文本模式
- v -- 進入標記文本模式,單字符模式
- V -- 進入標記文本模式,行模式
- <c-v> -- 進入標記文本模式,列模式,類似於UE的列模式
- 對標記文本模式中區域選擇
- aw -- 選中一個單詞,含單詞后的空格
- as -- 選中一個句子,含句號后的空格
- ap -- 選中一個段落,含段落后的空格
- ab -- 選中()括號中的所有內容,含()
- aB -- 選中{}括號中的所有內容,含{}
- iw -- 選中一個單詞,不含單詞后的空格
- is -- 選中一個句子,不含句號后的空格
- ip -- 選中一個段落,不含段落后的空格
- ib -- 選中()括號中的內容,不含()
- iB -- 選中{}括號中的內容,不含{}
- 移動標記文本模式中光標位置
- o -- 光標在選擇區域中的對角線之間的跳轉
- O -- 光標在選擇區域中的橫縱之間的跳轉
- 當在 V 與 <c-v> 模式中我們除了 o,O 來移動光標位置外,還可以通過移動光標位置中一些方法來移動光標位置(不是所有而是其中一些)
- 對標記文本模式中數據操作
- ~ -- 將選中塊中的內容大小寫翻轉
- u -- 將選中塊中的內容轉成小寫
- U -- 將選中塊中的內容轉成大寫
- y -- 復制選中塊中的內容
- d/D/x/X -- 刪除選中塊中的內容
行移動操作
- >> -- 將當前行右移一個單位
- << -- 將當前行左移一個單位(一個tab符)
- == -- 自動縮進當前行
- :n1,n2 co n3 -- 將 n1 行到 n2 行之間的內容拷貝到第 n3 行下.若無『 ,n2』則復制 n1 到 n3 行下
- :n1,n2 m m3 -- 移動 n1 行到 n2 行之間的內容移至第 n3 行下.若無『 ,n2』則將 n1 內容移到 n3 行下
- :n1,n2 d -- 刪除 n1 行到 n2 行之間的內容,『 ,n2』則將 n1 行刪除
- :n1,n2 y -- 復制 n1 行到 n2 行之間的內容,『 ,n2』則將 n1 行復制
字符替換
- :[range]s/{pattern}/{string}/[flag] [count]
窗口
打開窗口的命令以下幾個
- 打開標簽
- :tabe 標簽名
- 橫向切割窗口
- :new 窗口名 (保存后就是文件名)
- :split 窗口名 (也可以簡寫為 :sp 窗口名)
- 縱向切割窗口名
- :vsplit+窗口名(也可以簡寫為 :vsp+窗口名)
窗口切換
- <c-w>[h | j | k | l | ←|↓|↑|→]
移動窗口
- <c-w>t -- 將光標移動到最上方的窗口
- <c-w>b -- 將光標移動到最下方的窗口
ctags
窗口大小調整
- 縱向調整
- <c-w>+ -- 縱向擴大(行數增加)
- <c-w>- -- 縱向縮小 (行數減少)
- :res(ize) num -- 例如::res 5,顯示行數調整為5行
- :res(ize)+num -- 把當前窗口高度增加num行
- :res(ize)-num -- 把當前窗口高度減少num行
- 橫向調整
- :vertical res(ize) num 指定當前窗口為num列
- :vertical res(ize)+num 把當前窗口增加num列
- :vertical res(ize)-num 把當前窗口減少num列
多窗口操作
- :qa(ll) -- 退出所有窗口,但是如果你有一個窗口發生改寫但未保存 vim 是不會退出的
- :wa(ll) -- 保存所有修改過的窗口
- :wqall -- 保存所有修改過的窗口並關閉,然后退出 vim:qall! 強制退出所有窗口,然后退出 vim
- :argdo [命令] -- 對所有待編輯的窗口都執行 argdo 后面跟的命令
- :only -- 了編輯以外的窗口,但是那些窗口中要是有文本被改寫過並且沒有保存那么操作將失敗
vim 多文本編輯
- :n 編輯下個文件
- :N 編輯上個文件
- :files 列出目前這個 vim 的打開的所有文件
保存與退出
- :q -- 退出 vim 返回到 shell,若有修改未被保存,vi 在末行給出提示信息並不退出 vim 到 shell
- :q! -- 退出 vim 返回到 shell,放棄未保存的修改
- :x -- 保存后退出,若文件沒有修改的話,不更新文件的修改時間
- :w -- 將編輯的數據寫入硬盤中
- :w! -- 若文件屬性為"只讀"時,強制寫入該文件
- :w filename -- 寫入當前文件到 filename 文件
- :n1,n2 w filename -- 將 n1 到 n2 的內容保存到 filename 這個文件中
- ZZ -- 若文件沒有更動,則不保存離開,若文件被更動過,則保存后離開
十六進制查看文本類容
- :%!xxd -- 按十六進制查看當前文件
- :%!xxd -r -- 從十六進制返回正常模式
插件快捷鍵
tag 快捷鍵
- <c-]> -- 跳到當前光標下單詞的標簽
- <c-o> -- 返回上一個標簽
- <c-t> -- 返回上一個標簽
- <c-w>] -- 新窗口顯示當前光標下單詞的標簽,光標跳到標簽處
- :tag TagName -- 跳到TagName標簽
- :stag TagName -- 新窗口顯示TagName標簽,光標跳到標簽處
OmniCppComplete
當自動補全下拉窗口彈出后,一些可用的快捷鍵:
- <c-p> -- 向前切換成員
- <c-n> -- 向后切換成員
- <c-e> -- 表示退出下拉窗口, 並退回到原來錄入的文字
- <c-y> -- 表示退出下拉窗口, 並接受當前選項
winmanager
- <enter> -- 或雙擊 如果光標下是目錄, 則進入該目錄; 如果光標下文件, 則打開該文件
- <tab> -- 如果光標下是目錄, 則進入該目錄; 如果光標下文件, 則在新窗口打開該文件
- <F5> -- 刷新列表
- - -- 返回上一層目錄
- c -- 使瀏覽目錄成為vim當前工作目錄
- d -- 創建目錄
- D -- 刪除當前光標下的目錄或文件
- i -- 切換顯示方式
- R -- 文件或目錄重命名
- s -- 選擇排序方式
- r -- 反向排序列表
- x -- 定制瀏覽方式, 使用你指定的程序打開該文件
雜
書簽
- mc -- 把當前位置記錄為書簽 c ( c 為任意字符 ) 多個位置的標簽為一樣時,只有最后一個定義的位置標簽會生效
- `c -- 將光標轉移到書簽 c 處( c 為任意字符 )
執行 shell 命令
- :sh -- 打開 shell,可執行shell命令,輸入exit退出shell返回到vim
- :!cmd -- 直接執行 shell ( cmd 表示為任意 shell 命令 )