【Vim】實用命令行

在vim中高亮關鍵字

  • syntax enable 能夠高亮關鍵字:通常後面還要在跟一個syntax on打開語法高亮
  • syntax clear 清除關鍵字高亮

在secureCRT不是xterminal模式的時候,試了一下,沒起做用啊,若是是xterminal模式的時候是會起做用的java


在vim中查找

  • / 後面跟要查找的字符串:從當前光標位置向上搜索
  • ? 後面跟要查找的字符串:從當前光標位置向下搜索
  • n 找下一個
  • N 找上一個

清除並重畫屏幕

  • [Ctrl+l]組合鍵

vim快捷鍵定製

  • 對於鍵盤符號,可使用:help key-notation查看幫助

定製編輯環境

set命令用來定製編輯環境。程序員

  • set showmode 當vi處在輸入模式下時顯示提示信息
  • set sm 即時顯示配對的)或}
  • set ts=n 把製表符設置爲n(默認爲8)
  • set ai 下一行從前一行的縮進位置開始
  • set number 在編輯器中顯示行號
  • set nonu 取消在編輯器中的行號顯示
  • set hlsearch 高亮顯示搜索到的字符串
  • set incsearch 輸入字符串就立刻顯示匹配點
  • set ruler 標尺,用於顯示光標位置的行號和列號,逗號分隔。每一個窗口都有本身的標尺。若是窗口有狀態行,標尺在那裏顯示。不然,它顯示在屏幕的最後一行上。
  • set cindent:cindent控制縮進量是經過shiftwidth選項的值,而不是經過tabstops的值,shiftwidth的默認值是8
  • set shiftwidth:改變shiftwidth的值
  • set helplang=cn :vim幫助文檔沒法顯示中文時,加入這句試試
  • set encoding=utf-8
  • colo murphy:有的時候使用vim打開文件時,顯示的顏色不適合閱讀,可使用這條命令將配色改爲這種黑底

我在gvim中使用了上面的方法進行了設定,可是貌似沒有起到做用,不知道是我使用得不對仍是另有緣由正則表達式


移動光標

  • h 光標左移
  • l(或空格鍵) 光標右移
  • k(或[Ctrl+p]) 光標上移
  • j(或[Ctrl+n]) 光標下移
  • [Ctrl+f] 向前翻頁
  • [Ctrl+b] 向後翻頁
  • [Ctrl+d] 向前翻半頁
  • [Ctrl+u] 向後翻半頁
  • 1G 跳到文件首
  • 40G 跳到第40行
  • G 跳到文件尾
  • [Ctrl+g] 顯示當前行號及文件的百分比
  • Ctrl +E scroll down
  • Ctrl +Y scroll up

在一行內移動光標

B、E和W命令的做用與b、e和w的做用同樣,只是後者忽略了標點符號。shell

  • b 向後移動到單詞首
  • e 向前移動到單詞尾
  • w 向前移動到單詞首
  • 0或| 移動到行首
  • 30| 移動到第30列
  • ^ 移動到本行的第一個單詞的首字符
  • $ 移動到行尾
  • : num 跳轉到指定行號

插入文本

  • i 在光標的左側插入字符
  • 20i-[Esc] 插入20個連字符
  • I 在行首插入字符
  • a 在光標的右側添加文本
  • A 在行尾添加文本
  • o 在當前行下面插入一空行
  • O 在當前行上面插入一空行

選擇文本

  • ve:選擇整個單詞
  • yw:複製光標所在的單詞
  • 5yl:複製5個字符的輸入

刪除和移動文本

  • x 刪除光標所在的字符
  • 6x 刪除光標位置的字符以及右側的5個字符
  • X 刪除前一個字符
  • dd 刪除當前行
  • 4dd 刪除4行
  • dw 刪除一個單詞
  • d0 刪除到行首
  • d$ 刪除到行尾
  • d 刪除一個區域(只用於vim)
  • p 把被剪切的文本粘貼到下面(整行)或右側(部分行)
  • P 把被剪切的文本粘貼到上面(整行)或左側(部分行)
  • add 把當前行粘貼到緩衝區a裏
  • ap 把緩衝區a裏的內容粘貼到當前位置
  • J 把當前行於下一行合併爲一行
  • xp 調換兩個字符的位置(其實它是刪除一個字符,而後再又粘貼一個字符)

一些對程序員特別有用的快捷鍵

  • [[ = 移動到前一個行首的{字符上,等價於?^{:其實就是查找上一個函數
  • ]] = 移動到下一個行首的{字符上,等價於/^{:其實就是查找上一個函數
  • [] = 移動到前一個行首的}字符上,等價於?^} :用起來感受不是很方便
  • ][ = 移動到下一個行首的}字符上,等價於?^}:用起來感受不是很方便
  • f = 到前一個空行上
  • g = 到下一個空行上
  • gd = 到當前局部變量的定義處(當前的意思是光標停留其上的單詞).:使用以後全部與當前光標所在的單詞匹配上的單詞都高亮了
  • gD:跳轉到變量定義的地方
  • * = 到與當前單詞相同的下一個單詞上
  • # = 到與當前單詞相同的上一個單詞上
  • '' = 到上次光標停靠的行
  • %:可讓光標移動到與他相匹配的括號上去:這個很是有用
  • >增長縮進,x>表示增長如下x行的縮進
  • <減小縮進,x<表示減小如下x行的縮進
  • syntax enable + syntax on打開語法高亮

修改文本

  • rch 把光標位置的字符替換爲ch
  • R 替換光標右邊的文本
  • s 把光標所在的字符替換爲任意個字符
  • S 替換整行內容
  • cw 修改一個單詞
  • c 修改區域裏的文本(vim)
  • ~ 改變所掃描的或區域裏的字母的大小寫
  • !tr'[a-z]''[A-Z]'把區域裏的字母轉換爲大寫(vim)
  • !tr'[A-Z]''[a-z]'把區域裏的字母轉換爲小寫(vim)

vim 的tab相關

vim 從 vim7 開始加入了多標籤切換的功能, 至關於多窗口。以前的版本雖然也有多文件編輯功能, 可是總之不如這個方便啦。vim

  • :tabnew [++opt選項] [+cmd] 文件 : 創建對指定文件新的tab
  • :tabe 在一個新tab中打開指定的文件
  • :tabc 關閉當前的tab
  • :tabo 關閉全部其餘的tab
  • :tabs 查看全部打開的tab
  • :tabp 前一個
  • :tabn 後一個

標準模式下:安全

  • gt , gT 能夠直接在tab之間切換
  • :help table:詳細用法請查看相關幫助文檔

Vim比較兩個文件

  • vim -d file1 file2 直接打開兩個文件對比
  • vim file1打開第一個文件,而後使用vert diffsplit file2打開第二個文件進行對比;vert表示垂直分割窗口,默認爲水平分割窗口
  • 直接對比兩個文件的不一樣:使用diffthis分別在兩個窗口輸入;
  • [c, ]c定位不一樣點: 分別跳到前一個、後一個不一樣點;
  • ctrl-w w:窗口跳轉: 跳到下一個窗口
  • ctrl-w h/l: 跳到左側(右側)窗口
  • ctrl-w j/k 跳到上方(下方)窗口
  • dp文檔合併:將差別點的當前文檔內容合併到另一個文檔(diff put)
  • do 將差別點的另外一個文檔內容拷貝到當前文檔
  • zo 臨時展開被摺疊的相同內容
  • zc 從新摺疊

複製文本

  • yy 複製當前行
  • 6yy 複製六行
  • yw 複製單詞
  • y 複製區域(vim)
  • p 把複製的文本粘貼到右邊或下面
  • P 把複製的文本粘貼到左邊或上面
  • "ayy 把當前行復制到緩衝區a裏
  • "ap 恢復緩衝區a裏的內容

啓動編輯器

  • vi +100 foo 打開文件foo並把光標定位在100行
  • vi +/pat foo 打開文件foo並把光標定位在pat第一次出現的行
  • vi +foo 打開文件foo,把光標定位在文件尾
  • vi foo1 foo2 ... 打開文件foo1,用n切換到foo2等
  • vi -r foo 把交換文件裏的內容恢復到緩衝區裏
  • vi -R foo 一隻讀模式打開foo文件

保存與退出

  • :w 保存文件並繼續編輯
  • :w bar 同微軟Windows操做系統中的「另存爲……」
  • :w! bar 同上,可是覆蓋現存的文件bar
  • :n1,n2w foo 把n1到n2之間的行保存到文件foo
  • :n1,n2w>>foo 把n1到n2之間的行添加到foo文件尾
  • :.w foo 把當前行保存到文件foo
  • :$w foo 把最後一行保存到文件foo
  • :x 保存並退出編輯器
  • :wq 同上
  • :q 若是文件的內容沒有變化則退出編輯器
  • :q! 放棄修改並退出編輯器

vim中目錄瀏覽

  • :E :打開vim默認路徑的文件夾
  • :到上級目錄
  • D :刪除文件(大寫)
  • R :改文件名(大寫)
  • s :對文件排序(小寫)
  • x :執行文件

多文件編輯

若是當前行尚未保存(而且 autowrite 未設置),則不能使用:e、:n和:rew命令。命令後面的!使得安全特性無效。編輯器

  • :e foo 中止對當前文件的編輯,開始編輯foo文件
  • :e! foo 同上,可是取消對當前文件的修改
  • :e! 裝入當前文件的最近保存的內容
  • [Ctrl+^] 返回到最近編輯的文件
  • :n 編輯下一個文件(當用vi同時編輯多個文件時)
  • :set autowrite(aw) 在用:n切換到下一個文件以前自動保存當前文件
  • :rew 返回到文件列表的第一個文件(當用vi同時編輯多個文件時)
  • :r foo 把foo文件的內容插入當前行的下面

多窗口(vim)

  • :sq 把當前窗口拆分爲兩個
  • :new 打開一個新的空白窗口
  • :[Ctrl+w][Ctrl+w] 在窗口之間切換 Ctrl+w+R 將窗口移到右邊 Ctrl+w+L 將窗口移到左邊
  • :on 把當前窗口變爲惟一的窗口
  • :q 退出當前窗口
  • :qa 退出全部窗口
  • :xa 保存並退出所有窗口
  • [Ctrl]+ 增大窗口尺寸
  • [Ctrl]- 減少窗口尺寸

搜索與重複

搜索模式pat能夠時一個字符串,也能夠是一個正則表達式。vi使用一套專用的字符序列來執行一行內的搜索。函數

  • /pat 向前搜索pat
  • ?pat 向後搜索pat
  • /printf向前搜索printf
  • ?[0-0]$ 向後搜索行尾的數字
  • /^# 向前搜索行首的#
  • n 按上次搜索方向重複搜索
  • N 按與前次搜索的相反方向重複搜索
  • :set wrapscan(ws) 繼續搜索直至達到文件尾
  • :set ignorecase(ic) 搜索時不區分大小寫
  • :set magic 保留正則表達式字符的意義
  • fc 在當前行向前搜索字符c
  • Fc 在當前行向後搜索字符c
  • ; 在當前行重複上次向前搜索
  • , 在當前行重複上次逆向搜索
  • * :向下查找光標所在的單詞,相似於/
  • #:向上查找光標所在的單詞,相似於?

替換

源模式s1也能夠是正則表達式。使用歐冠地址時,"."表明當前行,"$"表明最後一行,"1,$"表明整個文件。this

  • :.s/s1/s2 把當前行中第一次出現的s1替換爲s2
  • :1,$s/s1/s2 把整個文件裏的s1替換爲s2
  • :1,$s/echo/printf/g 把所有的echo替換爲printf
  • :1,$s/s1/s2/gc 按交互方式把所有s1替換爲s2
  • :1,$s/#//g 刪除文件中全部的「#」
  • :3,10s/^/#/g 在3至10行的行首插入「#」
  • :$s/$/;/ 在最後一行的行尾插入「;」
  • :1,$s/s1/s2/g把全部的s1替換爲s2
  • :1,$s/HEAD/<&>/g 把全部的HEAD替換爲

標誌與書籤

  • ma 設置一個標籤a
  • 'a 移動到標籤a
  • " 在當前標誌與前一個標誌位置之間切換

重作與恢復

  • .重複上次命令
  • u 取消上次的編輯命令(在vim裏取消全部之前的命令)
  • [Ctrl+r] 重作上次取消的操做(只限於vim)
  • U 取消全部對當前行的操做
  • "4p 從緩衝區中恢復第4次最近的刪除操做

縮寫表示

  • :ab name stg 把name縮寫爲stg
  • :unab stg 刪除stg縮寫
  • :ab 列出全部的縮寫

映射鍵

  • :map key commands 把key映射到commands
  • :map! key commands 在輸入模式下把key映射到commands
  • :unmap key 取消命令模式下的key映射
  • :unmap! key 取消輸入模式下的key映射
  • :map 顯示命令模式下全部的映射
  • :map! 顯示輸入模式下的全部映射

與UNIX的接口命令

  • :!cmd 執行UNIX的cmd命令
  • :!%把當前文件做爲shell或perl腳本執行
  • :r !cmd 把cmd命令的結果插入到當前行的下面
  • :r !head -n 3 foo 把foo文件前三行內容插入到當前行的下面
  • sh 暫時退出UNIX shell 環境
  • [Ctrl+z] 暫停編輯(用fg命令能夠返回vi編輯器)
  • :!cc% 編譯正在編輯的C程序
  • :!javac %編譯正在編輯的Java程序

其它

  • 在文件中要修改部分文本的縮進:在命令模式下,按v去選擇多行,再按shift+>(<)來改變縮進。
  • 也可使用3再按shift+>(<)來改變縮進(3倍)

插件安裝

  • 普通插件本身將*.vim複製到~/.vim/plugin中便可
  • *.vmb的插件:則首先須要使用vim將插件打開,而後使用命令:so %進行安裝
  • *.vba的插件:首先使用vim打開插件,而後使用UseVimBall ~/.vim進行安裝

Vim的摺疊

  • 設置摺疊方式: 可用選項 'foldmethod' 來設定摺疊方式:set fdm=*
  • 6 種方法來選定摺疊:
    • manual 手工定義摺疊
    • indent 更多的縮進表示更高級別的摺疊
    • expr 用表達式來定義摺疊
    • syntax 用語法高亮來定義摺疊
    • diff 對沒有更改的文本進行摺疊
    • marker 對文中的標誌摺疊

注意,每一種摺疊方式不兼容,如不能即用expr又用marker方式,我主要輪流使用indent和marker方式進行摺疊。
使用時,用:set fdm=marker 命令來設置成marker摺疊方式(fdm是foldmethod的縮寫)。
要使每次打開vim時摺疊都生效,則在.vimrc文件中添加設置,如添加:set fdm=syntax,就像添加其它的初始化設置同樣。操作系統

  • 摺疊命令選取了摺疊方式後,咱們就能夠對某些代碼實施咱們須要的摺疊了,因爲我使用indent和marker稍微多一些,故以它們的使用爲例:若是使用了indent方式,vim會自動的對大括號的中間部分進行摺疊,咱們能夠直接使用這些現成的摺疊成果。在可摺疊處(大括號中間):zc 摺疊zC 對所在範圍內全部嵌套的摺疊點進行摺疊zo 展開摺疊zO 對所在範圍內全部嵌套的摺疊點展開[z 到當前打開的摺疊的開始處。]z 到當前打開的摺疊的末尾處。zj 向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。zk 向上移動到前一折疊的結束處。關閉的摺疊也被計入。
相關文章
相關標籤/搜索