Linux 中 VIM 的使用
?
Vim 官網:http://www.vim.org/
VIM 實用技巧:https://wenku.baidu.com/view/21c5f387d4d8d15abe234ecb.html
vim 的一些小技巧:https://www.douban.com/group/topic/1815089
vim 簡單實用的技巧總結:http://www.tuicool.com/articles/rq6ryqi
《Vim 實用技巧》筆記:http://darksun.blog.51cto.com/3874064/1548082
VIM 使用技巧 PDF 下載:http://download.csdn.net/download/freeking101/9882394
Kali自帶vim配置:https://blog.csdn.net/u012359618/article/details/52267319
史上最全 Vim 快捷鍵鍵位圖(入門到進階):https://www.linuxidc.com/Linux/2016-06/132019.htm
?
?
如果出現vim鼠標右鍵不能復制粘貼并且進入visual,可能是終端配置問題,把 Xterm 模式改為 linux 模式。或者設置?set mouse-=a。??set mouse=a【這個是用來開啟鼠標功能的,a表示所有模式】
gg=G? ? (自動格式化全部代碼)
mG=nG(自動格式化第m到第n行)
==? ? ? ? ?(格式化當前行)
?
?
Vim 鍵位圖
?
vim鍵位圖(如果網頁圖片看不清,可以 “右鍵->在新標簽頁中打開圖片” 查看)
?
英文版(基礎版)
?
簡體中文版(基礎版)
?
程序員定制版
https://blog.csdn.net/zhlh_xt/article/details/52458672
?
?
個性化配置
?
vim 是什么?
所有的Linux/UNIX都會默認安裝Vi,現在主流的linux都會給默認安裝vim。vim是Vi IMproved,是編輯器Vi的一個加強版。Vim/Vi是一個功能強大的全屏幕文本編輯器, 是Linux/UNIX上最常用的文本編輯器, 它的作用是建立、編輯、顯示文本文件;Vi幾乎支持所有的語言。Vim/Vi 沒有菜單,只有命令。 如果你是一名職業的SE,那么一定在尋找一款出色的能夠自由定制、滿足靈活編輯功能的編輯器。那么答案,就是vim或者Emacs。本文介紹vim編輯器。至于另一款強大的編輯器Emacs,以后有時間在整理學習。。。。
?
配置文件在哪?
Windows系統的配置文件是vim安裝目錄下的vimrc文件。
Linux系統,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。
Mac OS X的配置文件是/usr/share/vim/vimrc。
?
vimRC 中的 RC 是什么意思?
一般在運行某個軟件、環境或工具之初,要初始執行的一些命令,稱為 Run Commands,即 RC。根據 Wikipedia.org 的記載,RC 縮寫的用法源自 MIT 的相容分時操作系統(Compatible Time-Sharing System,CTSS)[參考1]。所以以后如果你看到了SystemRC 或者 ScreenRC,也就知其緣由了。
?
三種基本模式
在《大家來學vim》中提到vim有6+5種模式,除了細分程度不同外,實際上常用的只有3種模式:Normal Mode、Insert Mode和Command-line Mode。從Normal Mode進入Insert Mode,可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替換(replace)。從Insert Mode進入Normal Mode,只需要按ESC鍵即可。從Normal Mode進入Command-line Mode,可以按“:”、“/”、“?”。其中“:”表示輸入vim命令,“/”表示后面輸入要向下搜索的字符串,“?”表示后面輸入要向上搜索字符串。從Command-line Mode進入Normal Mode,只需要按ESC鍵即可了。可以把Normal Mode理解為常態,進入其他任何一種模式,需要某種特殊方式,而從其他特殊模式回到Normal Mode,就按ESC鍵即可。
?
Vim/Vi工作模式
?
?
vim中那些最最常用的配置
?
超級強大的vim配置:http://blog.csdn.net/freeking101/article/details/62037015
?
(1)顏色設置
syntax on "開啟代碼高亮 syntax off "關閉代碼高亮 syntax enable "開啟代碼高亮(2)搜索設置
set hlsearch " 開啟搜索高亮 set nohlsearch " 關閉搜索高亮 或者 命令模式下輸入:nohlsearch " nohlsearch 是 no highlight search 縮寫, 可以簡寫 noh 或者set noh set incsearch " 輸入搜索字符串的同時進行搜索 set ignorecase " 搜索時忽略大小寫可以使用如下方式來實現快速查找:
解釋一下:
Ctrl + r 是指使用寄存器 , 你會發現先輸入/ , 然后輸入 Ctrl + r , 會立刻變為 “ , 即寄存器的前綴, 然后 ”0 就可以理解了吧? 合起來就是 /“0, 就是查找剛才復制的那個單詞, 不懂的請查看上一個帖子:
vim的復制粘貼(系統剪切板):http://blog.csdn.net/hk2291976/article/details/42196559
vim之寄存器的使用和配置:http://blog.csdn.net/ballack_linux/article/details/53078836
(3)用戶界面
set showmode " 開啟模式顯示 set ruler " 開啟光標位置提示 set number " 顯示行號 set nonu " 不顯示行號 set cursorline " 強調光標所在行 set cmdheight=1 " 命令部分高度為 1(4)編輯輔助配置
set autoindent " 自動縮進 set noautoindent " 不自動縮進 set smartindent " 智能縮進 set autoread " 當文件在外部被改變時,vim自動更新載入 set showmatch " 顯示匹配的括號(5)set 命令 和 set 的一些選項
set命令:set ic 搜尋時忽略大小寫 (ic:ignore case):set noic 搜尋時不忽略大小寫:set number 顯示行號:set nonumber 不顯示行號 set 的一些選項all:列出所有選項設置情況term:設置終端類型ignorance:在搜索中忽略大小寫list:顯示制表位(Ctrl+I)和行尾標志($)number:顯示行號report:顯示由面向行的命令修改過的數目terse:顯示簡短的警告信息warn:在轉到別的文件時若沒保存當前文件則顯示NO write信息nomagic:允許在搜索模式中,使用前面不帶“\”的特殊字符nowrapscan:禁止vi在搜索到達文件兩端時,又從另一端開始mesg:允許vi顯示其他用戶用write寫到自己終端上的信息參考:
[1]Run Commands,http://en.wikipedia.org/wiki/Run_commands
[2]The Ultimate vim Configuration(vimRC),http://amix.dk/blog/post/19486
?
?
?
Vim 使用
?
Vim同時打開并切換多個文件
- 1、用 vim 打開一個文件,例如:original.trace
- 2、在普通模式下,輸入:":sp"(不含引號)橫向切分一個窗口,或者":vsp"縱向切分一個窗口,敲入命令后,你將看到兩個窗口打開的是同一個文件
- 3、在普通模式下,輸入:":e new.trace",在其中一個窗口里打開另一個文件
- 4、在 普通模式下 ctrl+w,再按一下 w,可以在兩個窗口之間切換
Vim跨文件復制
現在把 a.txt 的三行復制到 b.txt
1、用 vim 打開 a.txt
? ? ? ? # vim a.txt
? ? ? ? Esc 進入指令模式(默認剛打開就是這個模式)
? ? ? ? 輸入"a3yy
? ? ? ? 解釋:引號要結合shift輸入,a 代表剪貼板 a(26個英文字母都可以),3yy當然代表從當前行復制3行了
? ? ? ? 退出a.txt
? ? ? ? :q
2、打開 b.txt
? ? ? ? 光標移動到你想要復制的位置
? ? ? ? 進入指令模式,輸入"ap
? ? ? ? 解釋:引號要結合shift輸入,a 代表使用剪貼板 a,p 當然代表粘貼了
Vim 復制到系統剪貼板
- 1.首先查看 vim --version | grep clipboard 中 clipboard 選項是否開啟
- 2.ubuntu 中通過下載 vim-gnome 可以開啟系統剪貼板 sudo apt-get install vim-gnome
- 3.復制粘貼通過 "+y ?和 "+p 實現 (在一般模式下按 v 進入visual 模式 G 全選后復制)
?
怎樣在 vim 的命令行中拷貝,粘貼?
在 vim 的普通模式下,輸入':'進入命令行模式,我們可以在屏幕下方輸入我們想讓vim執行的命令。有時候,我們需要在命令行中執行拷貝粘貼,
例如:我們想要查找替換正文中的特殊字符,但我們又不知道怎么在命令行中輸入這個特殊字符。查找還好說,不一定非要在命令行中輸入這個特殊字符,只要把光標放在這個特殊字符上,按'*'向下查找,按'#'向上查找。但是如果我們要替換這個特殊字符,就必須在命令行中輸入它了,但是又不知道怎么輸入這個特殊字符,怎么辦?
答案是拷貝粘貼,先在正文中復制這個字符,然后粘貼在命令行中。
可是怎么在命令行中實現粘貼呢?別急,介紹一個好東西:命令行窗口。在正常模式下,輸入'q:',就打開了命令行窗口。命令行窗口中都是我們輸入過的命令,在這個窗口中我們可以像編輯正文一樣編輯新的命令,或修改舊的命令。因為像編輯普通緩沖區一樣,自然可以拷貝粘貼了。編輯完之后,在想要執行的命令上按回車,就ok了。命令執行后,命令行窗口也自動關閉了。
?
?
常用快捷鍵
?
進入vi的命令vi filename : 打開或新建文件,并將光標置于第一行首vi +n filename : 打開文件,并將光標置于第n行首vi + filename : 打開文件,并將光標置于最后一行首vi +/pattern filename:打開文件,并將光標置于第一個與pattern匹配的串處vi -r filename : 在上次正用vi編輯時發生系統崩潰,恢復filenamevi filename....filename :打開多個文件,依次進行編輯可視模式(選擇文本):------------ vim 中選中指定字符,進行復制/剪切/粘貼進入vim中visual模式,visual模式進入,可以有三種方式: (1)在普通模式(normal)下,直接按鍵 v 就可以進入默認visual模式可以使用 v+j/k/h/l 進行文本選擇 v(小寫字母v): 按字符移動,選中文本V(大寫字母V): 選擇一行,按行移動,選中文本可視模式,可以配合 d, y, >>, << 實現對文本塊的刪除,復制,左右移動ctrl+v : 按下^v后即可進行矩形的選擇了(ctrl + 小寫字母v) 在塊模式下,可以進行多列的同時修改,修改方法是:首先進入塊模式 Ctrl+ v,使用按鍵j/k/h/l進行選中多列。按鍵Shift + i 進行 塊模式下的插入,輸入字符之后,按鍵ESC,完成多行的插入。對于選中的文本進行如下按鍵:d:剪切操作y:復制操作p:粘貼操作^:選中當前行,光標位置到行首(或者使用鍵盤的HOME鍵)$:選中當前行,光標位置到行尾(或者使用鍵盤的END鍵):join 合并多行J 合并兩行Vim 的分屏操作(:split 文件名 同時在一個頁面顯示多個文件的內容,類似多窗口,用切換當前窗口。 多窗口是split,像用 e 打開多個文件是將文件放在緩沖區中)sp: 上下分屏,后可跟文件名。 :sp 001.txtvsp: 左右分屏,后可跟文件名 :vsp 001.txtCtr+w+w:在多個窗口切換wqall:保存退出關閉所有。 qall:退出所有啟動分屏:1.使用 大寫O 參數進行垂直分屏 vim -On file1 file2 ...2.使用 小寫o 參數進行水平分屏 vim -on file1 file2 ...注: n 是數字,表示分屏的數量,n 要大于等于文件個數關閉分屏1.關閉當前窗口 ctrl+w c (同時按下ctrl和w,松開按下c) 關閉分割窗口可以用:close,剩下只有一個窗口的話就不能關了。2.關閉當前窗口,如果只剩最后一個,則退出vim。ctrl+w q編輯中分屏1.上下分割當前打開的文件 ctrl+w s2.上下分割,并打開一個新的文件 :sp filename3.左右分割當前打開的文件 ctrl+w v4.左右分割,并打開一個新的文件 :vsp filename分屏編輯中光標的移動vi 中的光標鍵是 h,j,k,l,要在各個屏之間切換,只需要先按一下ctrl+w1.把光標移動到上邊的屏 ctrl+w k2.把光標移動到下邊的屏 ctrl+w j3.把光標移動到右邊的屏 ctrl+w l4.把光標移動到左邊的屏 ctrl+w h5.把光標移動到下一個的屏 ctrl+w w移動分屏1. 當前分屏向上移動 ctrl+w K2. 當前分屏向下移動 ctrl+w J3. 當前分屏向右移動 ctrl+w L4. 當前分屏向左移動 ctrl+w H屏幕尺寸1.增加高度 ctrl+w +2.減少高度 ctrl+w -3.讓所有屏的高度一致 ctrl+w =4.左加寬度 ctrl+w >5.右加寬度 ctrl+w <6.右增加n寬 (如:n=30) ctrl+w n <Normal Mode -> Insert Mode(i=insert、a=append、r=replace、o=open)。i 小寫字母i,在 光標前 插入a 小寫字母a,在 光標后 附加文本I 大寫字母I,在 本行行首 插入文本。在光標所在行的第一個非空格處插入A 大寫字母A,在 本行行尾 附加文本o 小寫字母o,在光標所在行的 下一行 處插入新行O 大寫字母O,在光標所在行的 上一行 處插入新行r 小寫字母r,替換光標所在處的字符一次R 大寫字母R,持續替換光標所在處的字符,直到按下ESCNormal Mode -> Command-line Mode:w 保存文件:w <filename> 另存為名為filename文件:w! filename 強制保存到指定文件,文件存在則覆蓋:wq! filename 強制保存到指定文件,文件存在則覆蓋,并退出:n1,n2 w <filename> 將n1行到n2行的數據另存為名為filename文件:w! 強制保存文件(前提是用戶有修改文件訪問權限的權限):q 退出緩沖區,即退出vi,如果文件修改但沒有保存,會提示無法退出:q! 不保存文件,直接退出 。:wq! 保存并強制退出:wq 保存退出。:x 如果文件有更改,則保存后退出,否則直接退出。ZZ (Normal 模式下 ZZ)同 :wq:wq! 強制保存文件并退出緩沖區(前提是用戶有修改文件訪問權限的權限):e filename 打開文件filename進行編輯:x 保存當前文件并退出:!command 執行shell命令command(也就是在VIM里面執行shell命令):n1,n2 w!command 將文件中 n1 行至 n2 行的內容作為command 的輸入并執行之,若不指定n1,n2,則表示將整個文件內容作為command的輸入:r!command 將命令command的輸出結果放到當前行:r 文件名 在光標所在處插入一個文件的內容。(read):r /etc/passwd 在打開的文件中,在光標所在處讀入/etc/passwd內容:3r /etc/passwd 在打開文件的第3行開始讀入 /etc/passwd的所有內容。:35 r 文件名 將文件插入至 35 行之后。打開一個文件編輯后才知道登錄的用戶對該文件沒有寫的權限,不能存盤,需要將所做修改存入臨時文件。vi file:w /tmp/1 把第20~59行之間的內容存盤成文件/tmp/1,我們可以鍵入如下命令。vi file:20,59w /tmp/1Insert Mode -> Normal Mode 和 Command-line -> Normal Mode按下ESC鍵常用光標移動按鍵( 在 vi 中, 移動光標 和 編輯 是 兩件事, 正因為區分開來, 所以可以很方便的進行光標定位和編輯.)Ctrl+o 回到光標的上一位置光標字符操作h、j、k、l:左、下、上、右 的移動光標命令。雖然您可以在Linux中使用鍵盤右邊的4個光標鍵,但是記住這4個命令還是非常有用的。這4個鍵正是右手在鍵盤上放置的基本位置。$ 光標移動到行尾(End),注意要按Shift鍵0 (注意是數字零)光標移至當前行首(Home)^ 光標移動到行首第一個非空白字符(Home),注意要按Shift鍵space 光標右移一個字符Backspace 光標左移一個字符Enter 光標下移一行'' 此命令相當有用, 它移動光標到上一個標記處, 比如用 gd, * 等查找到某個單詞后, 再輸入此命令則回到上次停留的位置.'. 此命令相當好使, 它移動光標到上一次的修改行.`. 此命令相當強大, 它移動光標到上一次的修改點.光標詞操作w或W 光標右移一個字至字首b或B 光標左移一個字至字首e或E 光標右移一個字至字尾光標句操作、段操作、行操作) 光標移動到后一句的句首( 光標移動到前一句的句首} 光標移動到下一段的段首{ 光標移動到上一段的段首nG 定位到 第 n 行首 (G 是goto 的意思):n 定位到 第 n 行gg 移動到文件第一行行首G 移動到文件最后一行。Ctrl+G 光標所在位置的行數和列數報告數字n 光標 向下 移動 n 行。例如:正常模式下,按下數字5,然后回車,代表向下移動5行。n+ 光標下移n行,例如10+。 n- 光標上移n行,例如5-。 n$ 光標移至第n行尾光標頁操作。屏幕翻滾類命令Ctrl+f 向下翻頁(Pagedown)Ctrl+b 向上翻頁(Pageup)Ctrl+d 向下翻半頁Ctrl+u 向上翻半頁nz:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。H 光標移至屏幕頂行(Head)M 光標移至屏幕中間行(Middle)L 光標移至屏幕最后行(Last)常用編輯快捷鍵:n1,n2 co n3 將n1行到n2行之間的內容“拷貝”到第n3行下:.,5 copy 10 把從當前行開始直至后序第5行的內容“復制”到第10行之后:6,$ co 2 把從第6行開始至文件尾的內容“復制”到第2行之后:n1,n2 m n3 將n1行到n2行之間的內容“移至”到第n3行下:1,5 move 12 把第1行到第5行的內同“移動”到第12行之后:n1,n2 d 將n1行到n2行之間的內容刪除:1,5 delete 刪除第1行到第5行內容[n]s 從當前光標位置處開始,以輸入的文本替代指定數目的字符。加上n代表替換n個S 刪除光標所在行。即清空光標所在行。按esc 鍵結束C 替換光標位置開始直至行尾的所有數據內容。清空光標所在位置到行尾內容。ncw或nCW 修改指定數目的字nCC 修改指定數目的行[n]cc 刪除整行,但是刪除的行不會消失,而是變為空,然后可以修改整行的內容。cw:刪除一個單詞并進入插入模式, cc:刪除一行并進入插入模式。Ctrl+u 刪除輸入方式下所輸入的文本J 把下一行合并到當前行尾 v(view)->選中內容->d:先在命令模式下按v,再使用方向鍵選擇內容,然后按d刪除選中的內容"?nyy:將當前行及其下n行的內容保存到寄存器?中,其中?為一個字母,n為一個數字"?nyw:將當前行及其下n個字保存到寄存器?中,其中?為一個字母,n為一個數字"?nyl:將當前行及其下n個字符保存到寄存器?中,其中?為一個字母,n為一個數字"?p:取出寄存器?中的內容并將其放到光標位置處。這里?可以是一個字母,也可以是一個數字ndd:將當前行及其下共n行文本刪除,并將所刪內容放到1號刪除寄存同時編輯2個文件,拷貝一個文件中的文本并粘貼到另一個文件中。vi file1 file2yy 在 文件1 的光標處拷貝所在行:n 切換到下一個文件 (n=next)p 在 文件2 的光標所在處粘貼所拷貝的行:N 切換回上一個文件刪除操作(delete)dd 刪除光標所在行。 ( 剪切dd --- 粘貼p ),yw 復制單詞,yy 復制行ndd 刪除從光標所在行開始,向下的n行d1G 刪除從光標所在行開始,到第一行的所有行dG 刪除光標所在開始到文件尾的所有字符d$ 刪除從光標所在位置,到行尾的所有字符d0 刪除從光標所在位置,到行首的所有字符d0 刪除到某一行的開始位置 d^ 刪除到某一行的第一個字符位置(不包括空格或TAB字符) D 以行為單位,刪除包括光標在內及其后面的所有字符。即 刪除 至 行尾 dw 刪除到某個單詞的結尾位置 d3w 刪除到第三個單詞的結尾位置 或者 ndw 或 ndW 刪除光標處開始及其后的 n-1 個字db 刪除該行光標前字符(delete begin)。 de 刪除自光標開始后面的字符(delete end)cw、dw 改變(置換)/刪除光標所在處的單詞(或者字) (c=change、d=delete)。nx 向后刪除n個字符。nX 是向前刪除n個字符。3x:刪除光標開始3個字符x 或 X 刪除一個字符。x(相當于delete)刪除光標后的,而X(相當于backspace)刪除光標前的dW 刪除到某個以空格作為分隔符的單詞的結尾位置 dB 刪除到某個以空格作為分隔符的單詞的開始位置 d7B 刪除到前面7個以空格作為分隔符的單詞的開始位置 d) 刪除到某個語句的結尾位置 d4) 刪除到第四個語句的結尾位置 d( 刪除到某個語句的開始位置 d) 刪除到某個段落的結尾位置 d{ 刪除到某個段落的開始位置 d7{ 刪除到當前段落起始位置之前的第7個段落位置 dd 刪除當前行 d/text 刪除從文本中出現“text”中所指定字樣的位置, 一直向前直到下一個該字樣所出現的位置(但不包括該字樣)之間的內容 dfc 刪除從文本中出現字符“c”的位置,一直向前直到下一個該字符所出現的位置(包括該字符)之間的內容 dtc 刪除當前行直到下一個字符“c”所出現位置之間的內容 dL 刪除直到屏幕上最后一行的內容 dH 刪除直到屏幕上第一行的內容 dG 刪除直到工作緩存區結尾的內容 d1G 刪除直到工作緩存區開始的內容 將光標移到需要刪除的行處按 Ctrl+G 顯示行號,再到結尾處 Ctrl+G 顯示結尾的行號。假設2次得到的行號為20和100,則把這期間的內容全刪除:20,100d 刪除從20行到100行的內容也可以在要刪除的開始行和結束行中用ma、mb命令標記,然后用下面命令刪除。:a,bd復制操作(yank) yy 或者 Y 復制光標所在行。拷貝一行到剪貼板中nyy 或者 nY 復制從光標所在行開始向下的n行。拷貝n行到剪切板中y1G 復制從光標所在行開始,到第一行的所有行yG 復制從光標所在行開始,到最后一行的所有行y$ 復制從光標所在位置,到行尾的所有字符y0 復制從光標所在位置,到行首的所有字符 yw 拷貝一個單詞。如果要復制整行的最簡單辦法就是V,y,p 就行了 yfa 表示拷貝從當前光標到光標后面的第一個a字符之間的內容.dfa 表示刪除從當前光標到光標后面的第一個a字符之間的內容.5fx 表示查找光標后第 5 個 x 字符.5w(e) 移動光標到下五個單詞.5yy 表示拷貝光標以下 5 行.5dd 表示刪除光標以下 5 行.y2fa 表示拷貝從當前光標到光標后面的第二個a字符之間的內容.:12,24y 表示拷貝第12行到第24行之間的內容.:12,y 表示拷貝第12行到光標所在行之間的內容.:,24y 表示拷貝光標所在行到第24行之間的內容. 刪除類似.粘貼操作(paste)p(小寫):取出剪貼板中內容的命令,并在光標所在位置向下新開辟一行,粘貼P(大寫):向當前行的上面一行粘貼 撤銷與重做操作(undo,redo)u (Undo)撤銷上一個操作(也就是一步一步撤銷)U: 撤銷當前文本的全部編輯Ctrl+r (Redo)重做上一個操作重復操作.(英文的句號) 重復上一操作,就是重復上一次操作命令替換操作(replace)r 替換光標所在處字符R 進入替換模式,直至按ESC退出cc 替換光標所在行cw 替換光標所在的英文單詞~ 轉換大小寫排版操作:le<ft> 光標所在行左對齊(left):ri<ght> 光標所在行右對齊(right):ce<nter> 光標所在行居中(cneter)gg=G 可用于代碼的自動縮進排版[n]>> 從光標所在行開始向下[n]行文本行右移一個tab操作(編程時格式對齊有用)[n]<< 從光標所在行開始向下[n]行文本行左移一個tab操作(編程時格式對齊有用)縮進代碼> 行左移。可視模式(按v鍵后)。選中文本左移。該命令用于調整源碼縮進格式簡便快速。< 行右移。可視模式(按v鍵后)。選中文本右移。該命令用于調整源碼縮進格式簡便快速。v 選定后按 = 就是自動格式化代碼,自動縮進,內部的遞歸的縮進都做到了函數間跳轉ctrl+]和ctrl+T 分別是查找函數的定義和返回, 需要ctag的支持i 跳轉到光標所指標識符的定義行,是打開一個新的小窗口顯示,記住要加個 i,最好是找自己項目下的文件,否則找庫函數的話還不如man.大寫 K 看光標所指標識符的 man 幫助頁TABTAB 就是制表符, 單獨拿出來做一節是因為這個東西確實很有用.> 輸入此命令則光標所在行向右移動一個 tab.5>> 輸入此命令則光標后 5 行向右移動一個 tab.:12,24> 此命令將12行到14行的數據都向右移動一個 tab.:12,24>> 此命令將12行到14行的數據都向右移動兩個 tab.那么如何定義 tab 的大小呢? 有人愿意使用 8 個空格位, 有人用4個, 有的用2個。有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 沒關系, vim 能幫助你.以下的設置一般也都先寫入配置文件中, 免得老敲.:set shiftwidth=4 設置自動縮進 4 個空格, 當然要設自動縮進先.:set sts=4 即設置 softtabstop 為 4. 輸入 tab 后就跳了 4 格.:set tabstop=4 實際的 tab 即為 4 個空格, 而不是缺省的 8 個.:set expandtab 在輸入 tab 后, vim 用恰當的空格來填充這個 tab.折疊代碼zf 進行折疊, 用 zo 打開折疊,也可以方向鍵向右打開折疊,zc 折疊 (只要在被折疊的塊中的任一個語句就行)zi 展開所有折疊zC 對所在范圍內所有嵌套的折疊點進行折疊zo 展開折疊zO 對所在范圍內所有嵌套的折疊點展開常用多緩沖區操作按鍵vim下每一個打開的文件對應一個緩沖區(buffer)。多文件編輯會有兩種情形: 一種是在進入 vim 前所用的參數就是多個文件(這種情形稱為 argument list)。另一種情形是進入 vim 后另外再開其它的文件(稱為 buffer list)。不過都可以統稱為buffer。注意: :e 或者:new 或者:split 后邊可以跟目錄,這樣就可以在目錄下慢慢找要打開的文件了:n 編輯下一個文件。:2n 編輯下二個文件。:N 編輯前一個文件。注意,這種用法只能用于 argument list 的情形。:rew 回到首文件:args 查看當前編輯緩沖文件狀態:e# 或 Ctrl-^ 編輯前一個檔案,用于兩文件互相編輯時相當好用。:ls 顯示緩沖區中的文件,編號后邊有#的代表是前一個文件,可以通過:e#來進入,有%a的代表是當前文件,什么也沒有的可以通過:bn來進入,這里的n代表文件編號。:b 文件名或編號 移至該文件。:ls 列出打開各個文件的編號,沒有離開vim前編號是不會變的。這個指令 elvis 也是可以使用。當然 :e#編號 也是可以的,這樣的用法則是所有 vi clone 都通用了。:files 或 :buffers 或 :ls 會列出目前 buffer 中的所有文件。在 buffers 中,減號 - 表示這個 buffer 并未載入,不過,不必擔心,載入相當快速的。加號 + 表示這個 buffer 已經修改過了。:b 序號(代號) 此命令將指定序號(代號)的文件在本窗口打開, 其中的序號(代號)就是用 :ls 命令看到的.:set diff 此命令用于比較兩個文件, 可以用 :vsp filename命令打開另一個文件, 然后在每個文件窗口中輸入此命令,就能看到效果了.1、多文件編輯模式(1)argument list模式,就是在打開vim編輯器時,攜帶多個文件路徑參數。(2)buffer list模式,就是在進入vim編輯器后,打開多個緩沖區進行編輯。2、單一緩沖區打開多個文件:files 顯示目前打開了哪些文件:n 切換到下一個緩沖區內容:N 切換到上一個緩沖區內容:2n 切換到下下個緩沖區內容:bn 下一個緩沖區內容(buffer next):bp 上一個緩沖區內容(buffer previous)3、多個緩沖區打開多個文件:sp [filename] 打開一個新的緩沖區,如果有filename則內容為該文件,否則為當前文件Ctrl+w n 新建一個緩沖區Ctrl+w q 退出光標所在的緩沖區Ctrl+w j 光標移動到下一緩沖區Ctrl+w k 光標移動到上一緩沖區Ctrl+w l 光標移動到右一緩沖區Ctrl+w h 光標移動到左一緩沖區Ctrl+w v 左右切割窗口新建緩沖區Ctrl+w s 上下切割窗口新建緩沖區Ctrl+w o 使光標所在緩沖區最大化,其他緩沖區隱藏4.重新編輯放棄一修改過的文件,重新編輯。(1)使用命令 :q!強行退出后再vi flname重新進入。(2)使用命令 :e!強行重編輯更便捷。這樣也是會打開文件,但會放棄目前編輯文件的改變,否則如果文件已有變動,vim 預設是不讓您隨便離開的。:e! 后不接什么的話,代表舍棄一切修改,重新載入編輯中文件。常用搜索與書簽操作快捷鍵1. 搜索字符串 :%s/word//gn 統計 word 個數/string 向下 搜索字符串“string”?string 向上 搜索字符串“string”/^字符串 查找以“字符串開始”的行/字符串$ 查找以“字符串結尾”的行/a.b 查找字符串a任意字符串b2. 重復上次搜索n 根據上次搜索條件找到下一個匹配的字符串(即搜索完向下查找)。即 尋找下一個。N 根據上次搜索條件找到上一個匹配的字符串(即搜索完向上查找)。即 回到前一個。 3. 搜索單詞* 向下 搜索光標所在處的單詞(完全匹配)# 向上 搜索光標所在處的單詞(完全匹配)g* 向下 搜索光標所在處的單詞(部分匹配)。即 匹配包含該單詞的所有字符串.g# 向上 搜索光標所在處的單詞(部分匹配)。即 匹配包含該單詞的所有字符串.gd 查找與光標所在單詞相匹配的單詞, 并將光標停留在文檔的非。注釋段中第一次出現這個單詞的地方. % 本命令查找與光標所在處相匹配的反括號, 包括 () [] {}f(F)x 在光標所在行進行查找, 查找光標右(左)方第一個x字符。找到后:輸入 ; 表示繼續往下找輸入 , 表示反方向查找4. 標記書簽(mark)ma a為小寫字母,為光標所在處設定文檔書簽amA A為大寫字母,為光標所在處設定全局書簽A5. 使用書簽(mark)`a 到文檔書簽a處,Tab鍵上方'a 到文檔書簽a所在行行首處,Enter鍵左邊`A 到全局書簽A處,Tab鍵上方'A 到全局書簽A所在行行首處,Enter鍵左邊`n 如果n=0,緩沖區將打開上一次的文檔,且光標在上次編輯最后的位置,1-9 以此類推'n 如果n=0,緩沖區將打開上一次的文檔,且光標在上次編輯最后的位置所在行的行首,1-9 以此類推6. 查看書簽列表:marks 查看當前所有書簽替換命令s/str1/str2/gi 解釋:/ : 臨近s命令的第一個字符為邊界字符:/,@,#g : 一行內全部替換i : 忽略大小寫注意: 其中s為substitute(替代、代替),%表示所有行,g表示global(總體的)。:g/^/exec "s/^/".strpart(line(".")." ", 0, 4) 在行首插入行號:runtime! syntax/2html.vim 轉換 txt 成 html, 會按照你的顏色配置來轉 :s/p1/p2/g 將當前行中 所有p1 均用p2替代:s/p1/p2/ 不加g表示只把“當前行的第一個”替換:%s/abc/123/g 將所有行的abc替換成123:12,23s/aa/bb/g 將從12行到23行中出現的所有包含 aa 的字符串中的 aa 替換為 bb:12,23s/^/#/ 將從12行到23行的行首加入 # 字符:%s/:.*//g 刪除 文件中 從冒號開始直到行尾的所有部分。例如 文件 /etc/passwd :n1,n2s/p1/p2/g 將第n1至n2行中所有p1均用p2替代:20,30s/word1/word2/g 將從20到30行的所有word1全部替換成word2:1,$s/start/end/g 從第一行開始到文件最后,將字符串start替換為end:1,$s/word1/word2/g 或 :1,$s/word1/word2/gc (需要使用者確認):g/p1/s//p2/g 將文件中所有p1均用p2替換:r 文件名 在當前光標位置載入另一個文件:3,$s/^/some string/ 在文件的第3行到最后一行所有的行首插入“some string”。:%s/$/some string/g 在整個文件每一行的行尾添加“some string”。:%s/string1/string2/g 在整個文件中替換“string1”成“string2”。:3,7s/string1/string2/ 僅替換文件中的第3行到第7行中的“string1”成“string2”。:%s#/usr/bin#/bin#g 把文件中所有路徑/usr/bin換成/bin。也可以使用命令 “:%s//usr/bin//bin/g” 實現,其中“#”是轉義字符,表明其后的“/”字符是具有實際意義的字符,不是分隔符。使用以下方法刪掉文件中所有的空行及以#開始的注釋行。cat squid.conf.default | grep -v ^$ | grep -v ^#:%s/r//g 刪除DOS方式的回車^M :%s= *$== 刪除行尾空白 :%s/^(.*)n1/1$/ 刪除重復行 :%s/^.pdf/new.pdf/ 只是刪除第一個pdf :%s/// 又是刪除多行注釋(咦?為什么要說「又」呢?) :g/^\s*$/d 刪除所有空行:g!/^dd/d 刪除不含字符串'dd'的行 :v/^dd/d 同上 (譯釋:v == g!,就是不匹配!) :g/str1/,/str2/d 刪除所有第一個含str1到第一個含str2之間的行:v/./.,/./-1join 壓縮空行 :g/^$/,/./-j 壓縮空行 ndw 或 ndW 刪除光標處開始及其后的 n-1 個字符。 末行模式set:設置set nu numberset nonu nonumberset readonly/:查找/after(查找指定字符串)n,N(向下跳,向上跳)?向上查找!:執行命令:!ls -l /s查找并替換s/str1/str2/gi/:臨近s命令的第一個字符為邊界字符:/,@,#g:一行內全部替換i:忽略大小寫范圍n:行號.:當前光標行+n:偏移n行$:末尾行,$-3%:全文?
?
高效移動
?
光標移動效率是vim程序員達到甚至超過鼠標流程序員的關鍵技能。vim中的移動光標的方式有很多,我來舉幾個我實際使用過程中應用比較頻繁的技巧:
set relativenumber(顯示相對行號)。我無意間發現的一個十分實用的技巧,比set number顯示行號更好用。通過這個設置,行號的顯示會根據當前的光標的相對位置顯示成偏移數,并動態變化。這個好處是,可以利用數字+j?數字+k來進行多行跳轉,因為是編譯行數,所以數字不會太大。否則就算要向下移動10行,我們可能也需要用138gg。
-
w、e、b:按照單詞進行前后光標跳轉,也可以組合數字進行跳轉,不過以我的經驗,與其去算要跳多少個單詞,不如多按幾次吧。
-
I、A:移動到行首或行末的第一個字符處,并進入插入模式。
-
H、M、L:光標分別跳轉到可視區域的最上面、中間、最下面。
-
Ctrl+D、Ctrl+U:有時,需要看的文本不在可視區域,通過這些組合進行上下翻頁。
-
^、$、0:光標移動到行首和行尾(0是絕對行首)。不過因為^和$都需要同時按住shift,而且數字鍵我們往往難以盲打,所以我一般直接使用I+Esc、A+Esc。
-
%:移動到與當前括號匹配的括號處。
-
gj、gk:有時可視區域不夠寬,而一行的字符有很多,導致了wrap。那么通過jk是無法直觀的定位到同一物理行,卻不在同一個可視行里的位置,此時需要gj和gk。
-
f、F:通過上面的例子,我們知道,f是find的意思,可以在一行內查找某個字符出現的位置,并直接跳轉過去。比如f<可以從當前光標開始向右,找到第一個<,并移動過去。F是向左查找。
-
;:重復上一次的f查找操作
-
.:重復上一次的修改操作,跟;可以說是好基友,經常用來實現一些簡單的重復操作,比錄制宏要簡單很多。經常有意識的使用這種簡單重復,是vimer編輯思路進階的分水嶺。
?
?
高效修改
?
vim的另一個優勢是高效修改。在vim下修改就要改掉傳統鼠標流的思維方式,切忌提到修改就按i。有很多高效的修改辦法,而且這些辦法往往是可重復的。下面舉一些我常用的例子:
-
r:替換模式,替換當前光標所在位置的一個字符。雖然你同樣可以i進入插入模式,然后刪掉那個字符,再輸入需要的字符,但這種操作是鼠標流思維方式。替換是一個可重復操作,多用沒壞處。
-
cw:change word可以刪除從當前位置到一個單詞的結尾,并進入插入模式。這種操作常用于修改一個變量。比如對于:int count=0;希望把count改成cnt,那么當光標位于c字符處的時候,按cw可直接刪除count,并進入插入模式。然后直接繼續輸入cnt即可。
-
caw:change a word可以刪除當前光標所在位置的單詞。對于int count=0;的例子,如果此時光標在count中間某處,比如u處,直接鍵入caw可以達到同樣的效果。所以caw更強大一些。
-
c$、c^:舉一反三,可以猜到c$是從當前位置刪除到行尾,并進入插入模式。
-
ci":change inside "可以用于修改當前位置附近,在相同配對的"中的內容。比如對于const char *str="hello world";。當在雙引號中間的任意位置鍵入ci"可以直接清空字符串,并繼續輸入新的希望的字符串。
-
ci(、ci[:舉一反三change inside (?change inside [。
-
cit:這個比較特殊,可以直接編輯匹配的xml標簽中的內容!經常編寫html的童鞋可以熟悉一下。
-
yi":yank inside "?猜猜是啥意思?類似ci"只是把編輯操作編程復制操作,因為y是復制!是不是很強大。
-
ya":yank around "?復制整個字符串,包括雙引號。
-
yw、yaw、daw、d$...:好了,這些可以"發明"出來了。
-
o、O:向下向上增加空行
-
u、Ctrl+r:undo和redo
上面的例子體現了vim組合的思想,很多命令可以通過組合得到不同的效果。
?
?
?
?
Linux 編輯 windos 文件特殊字符問題
?
在linux下,不可避免的會用VIM打開一些windows下編輯過的文本文件。
會發現文件的每行結尾都會有一個^M符號,這是因為 DOS下的編輯器和Linux編輯器對文件行末的回車符處理不一致。
^M字符的來歷和作用:
? ? ? ? 在DOS/Windows里,文本文件的換行符為\r\n,而在*nix系統里則為\n,所以DOS/Windows里編輯過的文本文件到了*nix里,每一行都多了個^M。
? ? ? ? 所以^M只是一個換行符號,沒有實際的用處,我們可以將它保留,也可以將它刪除。
?
對于回車符的定義:?
windows:0D0A // 對應 \r\n unix\linux: 0A // 對應 \n MAC: 0D // 對應 \r刪除換行可以用以下命令刪除換行符: :%s/\n//g可以用以下命令刪除DOS文件中的回車符“^M”: :%s/\r//g可以用以下命令轉換DOS回車符“^M”為真正的換行符: :%s/\r/\r/g可以用以下命令刪除行尾的空格以及DOS回車符。它沒有使用“/”字符作為替換命令各個參數間的分隔符,而是使用了“#”字符。命令還使用了“\?”正則表達式,用來匹配它前面出現的字符0次或1次。 :%s#\s*\r\?$##可以用以下命令刪除三行空行: :%s/^\n\{3}//可以用以下命令將連續的兩個空行替換成一個空行: :%s/\n\n/\r/g替換命令的基本語法在全局替換中,ex編輯器使用指定的字符模式對文件中的每行進行檢查。在所有行中發現模式的位置,ex使用新字符串來替換模式。全局替換真正使用的是兩個ex命令是 :g(global全局)和:s(switch替換)。替換命令的語法如下: :s / old / new / 這將把當前中模式old的第一次出現修改為new。 /(斜桿)是命令不同部分之間的分隔符(當斜桿為該行的最后一個字符時,可不寫)下面這種形式的替換命令: :s / old / new / g 把當前行old的每次出現改為new,而不只是該行的第一個old。:s命令允許替換串后面帶有選項,上面語法中的g代表全局(g選項影響一行中的每個模式,不要把它與影響文件中所有行的:g命令混淆)通過在:s命令前加上地址前綴,可以把它的范圍擴展到多行。例如下面命令把50行到100行的old的每次出現都改為new: :50, 100 s / old / new / g下面的命令把整個文件中的old的每次出現都改為new: :1, $s / old / new / g 我們知道%等價于1,$,所以上行命令也可以這樣寫: :% s / old / new / g確認替換使用搜索替換命令有時候會出錯,而得到不想要的結果。所以小心并確認文件中需要修改的內容是一個明智的做法在替換命令尾部加上c (confirm用于確認),在替換每個old前都會提示并確認: :1, 30 s /old/new/ gc 將會出現提示replace with hehe (y/n/a/q/l/^E/^Y)? y替換,n不替換,a替換所有,q放棄,l替換第一個并進入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y來滾動屏幕的。上下文相關替換除了直接使用一個單詞(或短語)替換另一個,還有稍微復雜的全局替換語法。這些語法可以對一個模式進行搜索,一旦找到含有模式的行,就可以使用不同與模式的串進行替換,我們把這種替換叫做上下文相關替換。語法格式如下: :g /pattern/s/old/new/g 將會把包含pattern的行中,把所有old替換為new 第一個g表示是在文件的所有行上執行的命令,模式pattern識別要發生替換的行。在那些包含模式pattern的行上,ex將把old替換(s)為new。最后的g表示在該行上進行全部替換。如果用來進行搜索的模式與想要修改的模式相同,那么就不必重復它: :g/string/s//new/g 等價于 :g/string/s/string/new/g 還要注意: :g/string/s//new/g 也等價于 :% s/string/new/g 可以用第二種方式少輸一些字符回車在vim的輸入方法是ctrl+V,會得到^,此時再按回車.會得到^M這個就是回車了 因此把全文件所有str換成str回車的語句是: : 1,$ s/str/str^M/g ^M用上面的方法輸入1,$表示從1到最后一行,s是switch,g是global比較快捷的去除這些符號的方法有這么幾種:?
(1)使用VI的命令: 使用vi打開文本文件 vi dos.txt 命令模式下輸入 :set fileformat=unix :w (2)VI下使用正則表達式替換 g/\r/s///g或者 %s/\r//g (3)使用sed 工具 sed ’s/\r//’ filename > tmp_filename (4)既然window下的回車符多了‘\r’,那么當然通過刪除‘\r’ ,也可以實現: tr -d '\r' (5)最后一個方法是本人最常用的方法,個人覺得最方便 在終端下敲命令: $ dos2unix filename 直接轉換成unix格式,就OK了!~?
用vim時,想高亮顯示一個單詞并查找的方發,將光標移動到所找單詞.
?
1: shift + "*" ?向下查找并高亮顯示
2: shift + "#" ?向上查找并高亮顯示
3: "g" + "d" ? ?高亮顯示光標所屬單詞,"n" 查找!
?
?
一般指令模式
?
移動游標
| h 或向左方向鍵 | 游標向左移動一個字元 |
| j 或向下方向鍵 | 游標向下移動一個字元 |
| k 或向上方向鍵 | 游標向上移動一個字元 |
| l 或向右方向鍵 | 游標向右移動一個字元 |
| [ctrl]+[f] | 屏幕向下移動一頁,相當于[Page Down](常用) |
| [ctrl]+[b] | 屏幕向上移動一頁,相當于[Page Up](常用) |
| [ctrl]+[d] | 屏幕向下移動半頁 |
| [ctrl]+[u] | 屏幕向上移動半頁 |
| n+[Space] | n 表示數字,按下數字后再按空格鍵,游標會向右移動到這一行的第 n 個字元。 |
| 功能鍵[Home]或 0 | 游標移動到這一行的第一個字元處 |
| 功能鍵[End]或 $ | 游標移動到這一行的最后一個字元處?(常用) |
| H | 游標移動到這個屏幕最上方那一行的第一個字元 |
| M | 游標移動到這個屏幕中央那一行的第一個字元 |
| L | 游標移動到這個屏幕最下方那一行的第一個字元 |
| G | 游標移動到這個檔案的最后一行?(常用) |
| nG | n 為數字。游標移動到這個檔案的第 n 行 |
| gg | 游標移動到這個檔案的第一行?(常用) |
| n+[Enter] | n 為數字。游標向下移動 n 行?(常用) |
?
搜索與取代
| /word | 在當前游標所在位置往下尋找關鍵字為 word 的字符串?(常用) |
| ?word | 在當前游標所在位置往上尋找關鍵字為 word 的字符串 |
| n | 這里的 n 是按鍵 n。代表重復前一個搜索動作 |
| N | 這里的 N 是按鍵 N。功能與 n 相反,代表反向執行前一個搜索動作 |
| :n1,n2s/word1/word2/g | n1 與 n2 都為數字,表示行數。可在第 n1 行與第 n2 行之間尋找 word1 字符串,并替換為 word2?(常用) |
| :1,$s/word1/word2/g | 表示從第一行到最后一行,將 word1 字符串替換為 word2?(常用) |
| :1,$s/word1/word2/gc | 表示從第一行到最后一行,也是將 word1 字符串替換為 word2,不同之處是在替換前顯示提示字元,由用戶確認是否最終替換?(常用) |
注意: 使用 /word 的同時,配合使用 n 或者 N,搜索可以變得很方便的啦 :)
?
刪除、復制以及粘貼
| [Del] 或 x | 向后刪除一個字元?(常用) |
| X | 向前刪除一個字元?(常用) |
| nx | n 為數字,表示連續向后刪除 n 個字元 |
| dd | 刪除游標所在的那一行?(常用) |
| ndd | n 為數字,刪除游標所在的那一行往下數 的 n 個行?(常用) |
| d1G | 刪除游標所在的那行到第一行的所有數據 |
| dG | 刪除游標所在的那行到最后一行的所有數據 |
| d$ | 刪除游標所在處到該行的最后一個字元 |
| d0 | 是數字 0,刪除游標所在處到該行的第一個字元 |
| yy | 復制游標所在的那一行?(常用) |
| nyy | n 為數字, 復制游標所在的那一行往下數 n 行?(常用) |
| y1G | 復制游標所在行到第一行的所有數據 |
| yG | 復制游標所在行到最后一行的所有數據 |
| y0 | 復制游標所在的字元到該行行首的所有數據 |
| y$ | 復制游標所在的字元到該行行尾的所有數據 |
| p | 將已復制的數據粘貼在游標所在的那一行的下一行?(常用) |
| P | 將已復制的數據粘貼在游標所在的那一行的上一行,原來游標所在的那一行會被推后一行?(常用) |
| J | 將游標所在的行與下一行的數據合并為一行 |
| u | 撤銷前一個操作?(常用) |
| [ctrl]+r | 重做上一個被撤銷的操作?(常用) |
| . | 這是小數點,表示重復前一個操作?(常用) |
注意: 最后三個按鍵乃是神器,熟悉后記得經常使用它們,會讓你覺得使用 vim 是一件很快樂的事情哦 :)
?
一般指令模式切換到編輯模式
| :w | 將編輯的文件寫入硬盤?(常用) |
| :w! | 如果文件為只讀狀態,可以強制寫入硬盤,是否寫入成功,與你所擁有的文件權限有關 |
| :q | 離開 vi?(常用) |
| :q! | 即使文件未保存,仍強行離開 vi |
| :wq | 文件寫入硬盤后(即保存)離開 vi?(常用) |
| :wq! | 文件強制寫入硬盤后(即保存)離開 vi |
| ZZ | 大寫字母 Z,如果文件沒有修改,則直接離開;如果文件被修改,則保存后離開 |
| :w [filename] | 將當前文件另存為另一個文件,這個新文件的保存路徑為當前路徑 |
| :r [filename] | 在當前文件中讀入另一個文件的數據,插入到當前游標所在列的后面 |
| :n1,n2 w [filename] | 將第 n1 行到第 n2 行的數據儲存為新的文件 |
| :! command | 暫時離開 vi 到指令列模式下執行 command 的顯示結果 |
注意: ! 表示強制執行
?
?
vim 特有功能
?
區域選擇
| v | 字符選擇,移動游標,游標經過的地方會反白選擇 |
| V | 行選擇,移動游標,游標經過的行會反白選擇 |
| Ctrl +?v | 區塊選擇,移動游標以長方形方塊的方式反白選擇 |
| y | 復制反白選擇的地方 |
| d | 刪除反白選擇的地方 |
| p | 將之前復制的區塊,粘貼在游標所在處 |
vim塊選擇
? ? ? ? V: 字符選擇,會把光標經過的位置反白選擇
? ? ? ? v: 行選擇,會把光標經過的行反白選擇
? ? ? ? Ctrl + v: 塊選擇,可以使用長方形的方式反白選擇內容
? ? ? ? y: 將反白的地方復制
? ? ? ? d: 將反白的地方刪除
其中 V 或者 v 來選擇內容都可以使用 鼠標 來完成,至于塊選擇就比就特殊了。
如圖,使用 Ctrl+v 來選擇圖中矩形反白的部分,可以按y進行復制,或者按d刪除。
?
?
多文件編輯
| :n | 編輯下一個文件 |
| :N | 編輯上一個文件 |
| :files | 列出 vim 所打開的所有文件 |
注意:使用 vim a.txt b.txt … 指令,就能一次打開多個文件
?
多視窗
| :sp [filename] | 開啟一個新視窗。如果有加 filename,表示是在新視窗開啟一個新文件;否則,表示兩個視窗為同一個文件的內容(即同步顯示) |
| [ctrl]+w+向下方向鍵 | 先按下[ctrl]不放,然后再按下 w 后放開所有按鍵,最后再按下向下方向鍵,游標就會移動到下方的視窗 |
| [ctrl]+w+向上方向鍵 | 按鍵方法同上,游標會移動到上方的視窗 |
| [ctrl]+w+q | 關閉當前游標所在的視窗 |
?
補齊
| [ctrl]+x -> [ctrl]+n | 依據目前正在編輯的文件內容作為關鍵字,予以補齊(語法依據副檔名) |
| [ctrl]+x -> [ctrl]+f | 依據當前目錄下的文件名,予以補齊 |
| [ctrl]+x -> [ctrl]+o | 以副檔名作為語法關鍵字,予以補齊 |
?
環境設定參數
| :set nu | 設定行號 |
| :set nonu | 取消行號 |
| :set hlsearch | 搜索到的關鍵字反白顯示?(默認) |
| :set nohlsearch | 搜索到的關鍵字取消反白顯示 |
| :set autoindent | 自動縮排?(默認) |
| :set noautoindent | 不自動縮排 |
| :set backup | 自動存儲備份檔(備份檔名為 filename~) |
| :set ruler | 顯示右下角狀態說明 |
| :set showmode | 顯示左下角狀態說明(比如 INSERT) |
| :set backspace=(012) | 倒退鍵設置;2:可以刪除任意值;0 或者 1,僅可刪除剛剛輸入的字符,無法刪除原來就存在的字符 |
| :set all | 顯示所有環境參數設定值 |
| :set | 顯示與系統默認值不同的設定值 |
| :syntax on | 開啟語法著色 |
| :syntax off | 關閉語法著色 |
| :set bg=dark | 開啟語法著色深色方案 |
| :set bg=light | 開啟語法著色淺色方案?(默認) |
?
一些配置
set modelines=0 color asmanian2 " 設置背景主題 set linespace=2 " 字符間插入的像素行數目 set background=dark " 設置背景set mouse=a "允許鼠標 set autowrite " 自動保存 set wildmenu " 增強模式中的命令行自動完成操作 set showmode " 開啟模式顯示。顯示左下角狀態說明(比如 INSERT) set ruler " 開啟光標位置提示。顯示右下角狀態說明,打開狀態欄標尺。 set number " 顯示行號 set history=1000 " 歷史記錄數set cursorline " 突出顯示當前行 set cmdheight=2 " 命令行(在狀態行下)的高度,默認為1,這里是2 set laststatus=2 " 總是顯示狀態行 set magic " 設置魔術set confirm " 在處理未保存或只讀文件的時候,彈出確認 set autoindent " 自動縮進 set cindent set smartindent " 智能縮進 set autoread " 當文件在外部被改變時,vim自動更新載入 set scrolloff=3 " 光標移動到buffer的頂部和底部時保持3行的距離 set showmatch " 顯示匹配的括號 set matchtime=5 " 對應括號高亮時間(單位是十分之一秒)set ignorecase smartcase " 搜索時忽略大小寫,但在有一個或以上大寫字母時仍保持對大小寫敏感 set nowrapscan " 禁止在搜索到文件兩端時重新搜索 set hlsearch " 搜索到的關鍵字反白顯示 (默認) set incsearch " 搜素高亮,搜索逐漸高亮 "set nohlsearch " 搜索到的關鍵字取消反白顯示syntax on " 語法高亮 autocmd InsertLeave * se nocul " 用淺色高亮當前行 autocmd InsertEnter * se cul " 用淺色高亮當前行 set showcmd " 輸入的命令顯示出來,看的清楚些 set backspace=2 " 倒退鍵設置;2:可以刪除任意值;0 或者 1,僅可刪除剛剛輸入的字符,無法刪除原來就存在的字符 set bg=dark " 開啟語法著色深色方案 set bg=light " 開啟語法著色淺色方案 (默認) set completeopt=preview,menu "開啟normal 或visual模式下的backspace鍵空格鍵,左右方向鍵,insert或replace模式下的左方向鍵,右方向鍵的跳行功能 set whichwrap=b,s,<,>,[,]set foldenable " 允許折疊 set foldmethod=syntax " 設置語法折疊 set foldcolumn=0 " 設置折疊區域的寬度 set foldlevel=3 " 設置折疊層數為 setlocal foldlevel=1 " 設置折疊層數為 set nocompatible " 不要使用vi的鍵盤模式,而是vim自己的set tabstop=4 " Tab鍵的寬度 set softtabstop=4 " 統一縮進為4 set shiftwidth=4 " 統一縮進為4 set noexpandtab " 不要用空格代替制表符 set smarttab " 在行和段開始處使用制表符" 狀態行顯示的內容(包括文件類型和解碼) set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [%{&encoding}]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%Y\ -\ %H:%M\")} " set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] " set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ filetype on " 偵測文件類型 filetype plugin on " 載入文件類型插件 filetype indent on " 為特定文件類型載入相關縮進文件 filetype plugin indent on " 開啟插件 alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto'?
?
?
總結
以上是生活随笔為你收集整理的Linux 中 VIM 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot 自带工具类~Res
- 下一篇: Python 操作 pymysql 批量