Linux新手生存笔记[2]——vim训练稿
回到全局目錄
word轉成html再搞到csdn這塊,效果不是很好,表格每行顯示太高........囧
----------------------------
VIM命令訓練稿
目錄
1.打開文件操作...1
2.存儲及退出文件...2
3.模式轉換...2
4.光標移動...3
5.插入...4
6.刪除...4
7.復制和黏貼...5
8.查找...5
9.替換...6
10.編輯多個文件...6
11.其他命令...6
12分屏操作...7
13 vim的幫助指令...9
14.七個習慣
?
1.打開文件操作
| vi | 進入vi而不讀入任何文件 |
| vi filename | 進入vi并讀入指定名稱的文件 |
| vi filename....filename | 打開多個文件,依次進行編輯 |
| vi +n filename | 進入vi并且由文件的第幾行開始。 |
| vi + filename | 進入vi并且由文件的最后一行開始。 |
| vi +/pattern filename | 打開文件,并將光標置于第一個與pattern匹配的串處 |
| vi -r filename | 在上次正用vi編輯時發生系統崩潰,恢復filename |
| vim -R file | 只讀方式打開文件 |
| vimdiff fileA fileB | 比較編輯兩個不同的文件 |
?
2.存儲及退出文件
| 保存 | |
| :wq 或者 :x | 存文件,并且退出vi |
| ZZ | 保存并退出 (:x?表示僅在需要時保存,ZZ不需要輸入冒號并回車) ZZ = wq |
| :w | 保存當前文件 |
| :w filename | 寫入指定文件,相當于另存為,但未退出vi(若未指定文件名則為當前工作的文件名) 可帶行范圍??:n1,n2 w filename |
| :w /tmp/1 | 既然沒法存盤,不想放棄所做的所有修改,先臨時存到/tmp/1 |
| :saveas <path/to/file> | 另存為?<path/to/file> |
| 退出 | |
| :q | 不作任何修改并退出vi (多屏時用qa) |
| :q! | 放棄任何修改并退出vi |
| ZQ | 無條件退出 |
| 編輯 | |
| :e filename | 打開文件filename進行編輯[相當于退出當前的并打開另一個文件] |
| :e! | 放棄修改文件內容,重新載入該文件編輯 |
| :e | 重新載入【類似刷新】 |
| :w !sudo tee % | 以普通用戶身份打開的vim,修改后以root身份保存 |
| 其他 | |
| ctrl + z??/??? fg | 暫時掛到后臺/跳回編輯頁面 |
| :f 或 Ctrl-g?? | 顯示文件名,當前光標所在行的行號,總的行數,以及當前行所在文件中的百分比和當前光標所在的列的信息 |
| :!command | 暫時退出vi并執行shell指令,執行完畢后再回到vi |
| :r!command | 將命令command的輸出結果放到當前行【強大】 |
| :sh | 暫時退出vi到系統下,結束時按Ctrl + d則回到vi。 |
| vim -x exam.txt | 新編輯的文件加密,會提示輸入密碼 |
| :X | 文件加密,會提示輸入密碼 |
| :map | 列出當前已定義的映射 (如何定義映射?) |
| :jumps | 列出關于你曾經跳轉過的位置的列表,你最后一個跳轉的位置被特別以一個”>”號標記 |
| :marks | 列出自定義的標記,包含VIM內部自定義的標識 |
| :%!nl | 要對包含空行的所有行進行編號(所有行之前插入行號^I) |
| :version | 顯示VIM版本信息,包含特性、編譯方式及配置文件目錄 |
| :n1,n2 w ! command | 將文件中n1行至n2行的內容作為command的輸入并執行之,若不指定n1,n2,則表示將整個文件內容作為command的輸入【注意空格】例如? :1,4 w! grep tom |
| :options | 打開一個新窗口, 在該窗口的最開頭的注釋下面是一個選項列表(do what?) |
| :r filename | 在光標所在處插入一個文件的內容(read) 可加入數字 :nr filename |
| :f filename | 改變編輯中的文件名(file) 相當于復制了一個文件,執行這個命令后,新編輯不會應用于原文件 |
| gf | vim特殊打開文件的方法,打開光標所在處的 word 為名的文件,當然,這個文件要在當前目錄內,否則會創建新文件 |
?
3.模式轉換
1)命令行模式(command mode)
控制屏幕光標的移動,字符、字或行的刪除,移動復制某區段及進入Insert mode下,或者到 last line mode
a i o進入插入模式
:進入底行模式
?
??? 2)插入模式(Insert mode)<i/a/o/O> Insert? 2Insert
只有在Insert mode下,才可以做文字輸入
按「ESC」鍵可回到命令行模式。
??? 3)底行模式(last line mode)Normal模式
將文件保存或退出vi,也可以設置編輯環境,如尋找字符串、列出行號……等,使用命令執行編輯操作等
可縮寫(:setà:se)補齊(tab鍵的功效+CTRL-D)??歷史記錄(借助CTRL-UP)
/ (查找)?????(反查)
4)?????Visual模式<v / V / CTRL-v /r>
?
4.光標移動
| 字符?默認1,可加n | |
| h | 光標左移一個字符[回退鍵Backspace] |
| l | 光標右移一個字符[空格鍵Space] |
BP:
hkjl作為移動光標【important,同方向鍵,建議使用這四個】
?
| 單詞??默認1,可加n | |
| w | 光標跳到下個word的第一個字母 [常用] |
| W | 移到下一個字的開頭,忽略標點符號 |
| b | 光標回到上個word的第一個字母 |
| B | 移到前一個字的開頭,忽略標點符號 BACK |
| e | 光標跳到下個word的最后一個字母 |
| E | 移到下一個字的結尾,忽略標點符號 END |
?
| 行 | |
| 0 | 移到當前一行的開始[Home] 數字零,到行頭 |
| $ | 移到當前一行的最后[End] |
| ^ | 命令將光標移動到當前行的第一個非空白字符上 |
| g_? | 到本行最后一個不是blank字符的位置 |
| k | 光標上移一行Ctrl+p |
| j | 光標下移一行Ctrl+n |
| Enter | 光標下移一行 |
| n+ | 光標下移n行【按上檔鍵?數字shift +】 |
| n- | 光標上移n行 |
| G | 移到文件的最后一行 |
| nG或者:n | 移到文件的第n行 |
| gg | 移動到文檔的開始 |
| [[ | 文件開始位置——開始行 |
| ]] | 文件結束位置——末尾行 |
| H | 光標移至屏幕頂行????HEAD 光標定位在顯示屏的第一行 |
| M | 移到屏幕的中間行開頭 Middle 光標定位在顯示屏的中間 |
| L | 移到屏幕的最后一行 LAST 光標定位在顯示屏的最后一行 |
| ( | 光標移至句首 |
| ) | 光標移至句尾 |
?
| 段落 | |
| { | 移到段落的開頭 |
| } | 移到下一個段落的開頭 |
| % | 匹配括號移動,包括?(,?{,?[.(陳皓注:你需要把光標先移到括號上) 跳轉到與之匹配的括號處 |
| *?和?# | ?匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個) |
| zf | 折疊(需加方向鍵) |
| zo | 展開(空格也可以展開) 可以zf進行折疊, 用zo打開折疊,也可以方向鍵向右打開折疊,zc 關閉折疊(只要在被折疊的塊中的任一個語句就行)??? |
?
| 屏幕 | |
| Ctrl+u | 向文件首翻半屏up |
| Ctrl+d | 向文件尾翻半屏down |
| Ctrl+f | 向文件尾翻一屏 forward (fact整屏去兩行) |
| Ctrl+b | 向文件首翻一屏back (fact整屏去兩行) |
| CTRL-] | 跳轉到當前光標所在單詞對應的主題 |
| CTRL-O | 回到前一個位置 |
| zz | 命令會把當前行置為屏幕正中央(z字取其象形意義模擬一張紙的折疊及變形位置重置) |
| zt | 命令會把當前行置于屏幕頂端(top) |
| zb | 命令會把當前行置于屏幕底端(bottom) |
| 50% | 光標定位在文件的中間 |
| ` | 跳轉到最近光標定位的位置(只能記憶最近兩個位置)?反引號 |
?
5.插入
| i | 在光標前開始插入字符??insert |
| I | 在當前行首開始插入字符 |
| a | 在光標位置后開始加字??append |
| A | 在光標所在行的最后面開始加字 |
| o | 在光標下加一空白行并開始加字?open |
| O | 在光標上加一空白行并開始加字 |
| r | 替換當前字符 |
| R | 替換當前字符及其后的字符【當前及其后字符被覆蓋】 |
| s | 默認刪除光標所在字符,輸入內容插入之 = xi |
| S | 默認刪除當前行內容,輸入內容作為當前行新內容= dd+o |
?
6.刪除
| 字符 | |
| nx | 刪除由光標位置起始后的n個字符(含光標位置) x =dl(刪除當前光標下的字符) |
| nX | 刪除由光標位置起始前的n個字符(含光標位置) X =dh(刪除當前光標左邊的字符) |
| d0 | 刪至行首 |
| d$ | 刪至行尾 |
| dfa | 表示刪除從當前光標到光標后面的第一個a字符之間的內容 |
| D | 代表d$(刪除到行尾的內容) |
| C | 代表c$(修改到行尾的內容) |
?
| 單詞 | |
| ndw | 刪除光標處開始及其后的n-1個字 |
| ndb | 刪除光標處開始及其前的n-1個字 |
| diw | 刪除當前光標所在的word(不包括空白字符),意為Delete Inner Word?兩個符號之間的單詞 |
| daw | 刪除當前光標所在的word(包括空白字符),意為Delete A Word |
?
| 行 | |
| ndd | 刪除當前行及其后n-1行 |
| :n1,n2 d | 將 n1行到n2行之間的內容刪除 |
| dG | 刪除當前行至文件尾的內容 |
| dgg | 刪除當前行至文件頭的內容 |
| d回車 | 刪除2行【包括光標一行】 |
【刪除就是剪切,它會覆蓋之前復制的內容】
| 刪除并進入輸入模式 | |
| cw | 刪除當前字,并進入輸入模式 【很好用,快速更改一個單詞】 相當于dw+i |
| ncw | 刪除當前字及其后的n-1個字,并進入輸入模式\ 修改指定數目的字 |
| cc | 刪除當前行,并進入輸入模式 |
| ncc | 刪除當前行及其后的n-1行,并進入輸入模式 |
| guw | 光標下的單詞變為小寫 |
| gUw | 光標下的單詞變為大寫 |
| xp | 左右交換光標處兩字符的位置 |
| ga | 顯示光標下的字符在當前使用的encoding下的內碼 |
7.復制和黏貼
| 復制 | |
| nyl??????????? | 復制n個字符(也可nyh) |
| yw | 復制一個單詞 |
| y0 | 表示拷貝從當前光標到光標所在行首的內容 |
| y$ | 復制從當前位置到行尾 |
| yfa | 表示拷貝從當前光標到光標后面的第一個a字符之間的內容 |
| yG | 復制從所在行到最后一行 |
| nyy | 將光標所在位置開始的n行數據復制暫存 復制一整行 |
| ctrl + v?? 方向??y | 復制選擇的很多行:先使用V進入visual模式,然后j向下移動到你想復制的行為止,然后y |
| 黏貼 | |
| p | 復制暫存數據在光標的下一行 |
| P | 復制暫存數據在光標的上一行 |
| :n1,n2 co n3 | 將n1行到n2行之間的內容拷貝到第n3+1行【n3行的下一行】 |
| :n1,n2 m n3 | 將n1行到n2行之間的內容移至到第n3行下 |
| J | 把下一行的數據連接到本行之后 多一空格 |
| ~ | 改變當前光標下字符的大小寫 |
?
8.查找
| /pattern | 從光標開始處向文件尾搜索pattern |
| ?pattern | 從光標開始處向文件首搜索pattern |
| n | 在同一方向重復上一次搜索命令 |
| N | 在反方向上重復上一次搜索命令 |
| # | 向上完整匹配光標下的單詞 相當于?word |
| * | 向下完整匹配光標下的單詞 相當于/word |
| % | 查找對應的( [ {匹配 |
| nfx | 在當前行查找光標后第n個x(一般直接fx) |
?
9.替換
| :s/p1/p2/g | 將當前行中所有p1均用p2替代 無g,則只替換第一個 |
| :s/p1/p2/c | 查找替換要求確認 |
| :n1,n2s/p1/p2/g | 將第n1至n2行中所有p1均用p2替代 |
| ? | ? |
| :%s/p1/p2/g | 全局,使用p2替換p1 |
| :%s/p1/p2/gc | 替換前詢問 |
| :n,$s/vivian/sky/ | 替換第n行開始到最后一行中每一行的第一個vivian為sky,n為數字 |
| :.,$s/vivian/sky/g | 替換當前行開始到最后一行中每一行所有vivian為sky |
| :s/vivian\//sky\// | 替換當前行第一個vivian/為sky/,可以使用\作為轉義符 |
| :1,$s/^/some string/ | 在文件的第一行至最后一行的行首前插入some string |
| :%s/$/some string/g | 在整個文件每一行的行尾添加some string |
| :%s/\s\+$// | 去掉所有的行尾空格,“\s”表示空白字符(空格和制表符),“\+”對前面的字符匹配一次或多次(越多越好),“$”匹配行尾(使用“\$”表示單純的“$”字符) |
| :%s/\(\s*\n\)\+/\r/ | 去掉所有的空白行,“\(”和“\)”對表達式進行分組,使其被視作一個不可分割的整體 |
| :%s!\s*//.*!! | 去掉所有的“//”注釋 |
| :%s!\s*/\*\_.\{-}\*/\s*!!g | 去掉所有的“/* */”注釋 |
| :%s= *$== | 將所有行尾多余的空格刪除(沒看懂) |
| :g/^\s*$/d | 將所有不包含字符(空格也不包含)的空行刪除 |
| r | 替換當前字符 |
| R | 替換當前字符及其后的字符,直至按ESC鍵 |
| 命令說明: | |
| :[range]s/pattern/string/[c,e,g,i] ????range 指的是範圍,1,7指從第一行至第七行,1,$ 指從第一行 至最後一行,也就是整篇文章,也可以% 代表 (目前編輯的文章)。 ????pattern 就是要被替換掉的字串,可以用regexp 來表示。 ????string:?? 將pattern 由 string 所取代。 ????c: confirm,每次替換前會詢問。 ????e: 不顯示error。 ????g: globe,不詢問,整行替換。 ?????i: ignore 不分大小寫。 ????g 大概都是要加的,否則只會替換每一行的第一個符合字串。 ????可以合起來用 其中s為substitute,%表示所有行,g表示globa | |
?
10.編輯多個文件
| :r filename | 將指定文件的內容讀入光標所在行下 |
| :args | 顯示編輯名單中的各個文件名列表 |
| :n | 切換到下一個文件 |
| :N | 切換到上一個文件 |
| :rew | 回到首個文件 |
| :e# | 讀入編輯名單內的前一個文件 |
| :e file | 讀入另一個文件進vi(此文件可不在編輯名單內),若原文件經修改還沒有存檔,則應先以: w 存檔。 |
| :e! file | 強迫讀入另一個文件進入vi,原文件不作存檔動作。 |
| :e | 放棄當前一切修改,重新載入文件 |
| :bn?和?:bp? | 你可以同時打開很多文件,使用這兩個命令來切換下一個或上一個文件 |
| :files或 :buffers或 :ls | 會列出目前 buffer 中的所有文件 |
?
11.其他命令
| . | 重復前一指令 |
| u | 取消前一指令undo :u也行,一般不用,操作太多 |
| Ctrl + r | 恢復【只對u有效】redo |
| Ctrl + l | 刷新屏幕顯示 |
| Ctrl+v 然后 ctrl+A是^A ????Ctrl+I是\t | 輸入特殊字符 ? |
| Ctrl+v 然后用j、k、l、h或方向鍵上下選中多列,之后 I I?? a A? r? x等,最后按esc,生效 | Vim列操作 ? |
| V | 進入visual模式【ESC】退出 多行選中模式 |
【set可以簡寫為se】
附錄:set的所有選項
| all | 列出所有選項設置情況 |
| 常用 | |
| :se number 簡寫 :se nonum | 顯示文件的行號? 簡寫:se nu??se nonu |
| :se list | 顯示制表位(Ctrl+I)和行尾標志($)??se nolist |
| :se wrap | 將超出屏幕行分多行顯示?se nowrap 打開/關閉換行 |
| :se paste | vim貼代碼的時候,格式亂掉 先之后,黏貼,就不會亂掉 |
| :set ignorecase | 設置在搜索中忽略大小寫 |
| :set hlsearch | 高亮顯示搜索結果? |
| :nohls | 可以取消高亮 |
| 其他 | |
| term | 設置終端類型 |
| report | 顯示由面向行的命令修改過的數目 |
| terse | 顯示簡短的警告信息 |
| warn | 在轉到別的文件時若沒保存當前文件則顯示NO write信息 |
| nomagic | 允許在搜索模式中,使用前面不帶“\”的特殊字符 |
| nowrapscan | 禁止vi在搜索到達文件兩端時,又從另一端開始 |
| mesg | 允許vi顯示其他用戶用write寫到自己終端上的信息 |
| :set autowrite | 設置自動存盤 |
| :set backup | 設置備份 |
| :set backupext=.bak | 設置備份文件名后輟,默認原文件名~ |
| :syntax enable | 打開彩色 |
| :set autoindent | 讓Vim在開始一個新行時對該行施以上一行的縮進方式 |
| :set showcmd | 在Vim窗口的右下角顯示一個完整的命令已經完成的部分 |
| :set key= | 去掉文件加密 |
| :set ai | 設置每行起始位置(以光標當前位置為起始) |
| :set noai | 取消行起始位置設定 |
| :set incsearch | 鍵入目標字符串的過程中Vim就同時開始了搜索工作 |
| :set ts=4 :set expandtab | 一個Tab自動轉換成4個空格 |
?
12分屏操作
| 分屏啟動Vim | ||
| ? | ||
| vim -On file1 file2 ... ? | 使用大寫的O參數來垂直分屏 | |
| vim -on file1 file2 ... | 使用小寫的o參數來水平分屏。 | |
| 注釋: n是數字,表示分成幾個屏【只會出現n屏,后面跟多了文件不會顯示】 使用VIM的幫助?:help split | ||
| 分屏 | ||
| Ctrl+W s | 上下分割當前打開的文件 | |
| Ctrl+W v | 左右分割當前打開的文件 | |
| :sp filename | 上下分割,并打開一個新的文件 | |
| :vsp filename | 左右分割,并打開一個新的文件 | |
| 關閉分屏 | ||
| Ctrl+W c | 關閉當前窗口【關閉不了最后一個】 | |
| Ctrl+W q | 關閉當前窗口,如果只剩最后一個了,則退出Vim | |
| :qa | 退出vim,并關閉所有屏 | |
| :wqa | 保存所有分屏并關閉 | |
| 移動光標 | ||
| Ctrl+W l | 把光標移到右邊的屏 | |
| Ctrl+W h | 把光標移到左邊的屏中 | |
| Ctrl+W k | 把光標移到上邊的屏中 | |
| Ctrl+W j | 把光標移到下邊的屏中 | |
| Ctrl+W w | 把光標移到下一個的屏中 | |
| 要在各個屏間切換,只需要先按一下Ctrl+W? <C-w><dir>?: dir就是方向,可以是?hjkl?或是 ←↓↑→中的一個,其用來切換分屏 | ||
| 移動分屏 | ||
| Ctrl+W L | 向右移動 | |
| Ctrl+W H | 向左移動 | |
| Ctrl+W K | 向上移動? | |
| Ctrl+W J | 向下移動? | |
| 這個功能還是使用了Vim的光標鍵,只不過都是大寫。當然了,如果你的分屏很亂很復雜的話,這個功能可能會出現一些非常奇怪的癥狀。 | ||
| 屏幕尺寸 | ||
| 下面是改變尺寸的一些操作,主要是高度,對于寬度你可以使用Ctrl+W <或是>,但這可能需要最新的版本才支持 當同時打開幾個文件時,按 _ 使當前窗口最大化 | ||
| Ctrl+W = | 讓所有的屏都有一樣的高度 | |
| Ctrl+W +【shift +=鍵】 | 增加高度 <C-w>+?(或?<C-w>-)??增加尺寸 擴大窗口 | |
| Ctrl+W -【shift –鍵】 | 減少高度 縮小窗口 | |
| <C-w>_?(或?<C-w>|) | 最大化尺寸 (<C-w>|?垂直分屏) | |
| ? | ? | ? |
?
關閉分割窗口可以用:close 其實用:q也行
13 vim的幫助指令
Vim擁有一個細致全面的在線幫助系統,進入幫助
| 啟動幫助 |
| <HELP>鍵 (如果鍵盤上有的話) |
| <F1>鍵(如果鍵盤上有的話) |
| :help<回車> |
| :help command<回車> ???例如:help w <回車> |
| 退出幫助 |
| :q <回車> |
VIM操作模式轉換圖
14 七個習慣
???????快速移動
???????不要兩次鍵入同樣的東西
???????錯誤修復
???????經常需要編輯不止一個文件
???????協同作業
???????文本是結構化的
???????養成習慣
?
1. 快速移動
在文本中隨意漫游是非常常見的操作。所以高效編輯的第一要義是學習如何能夠在文本中快速移動,準確定位。有三個步驟可以使你學到你需要的技巧:
當你編輯文件的時侯,留意一下你經常要重復進行的操作是什么;
練習使用這些命令,直到你的手指可以不假思索地運用自如;
瀏覽一下參考手冊你就會發現關于tag的主題。文檔會告訴你如何使用這一功能跳轉到函數的定義處。
2. 不要兩次鍵入同樣的東西
借助":s"替換命令或者"."重復命令等快捷操作代替重復操作。
3. 錯誤修復
縮寫功能來糾正。一些例子是::abbr Lnuix Linux。
語法高亮機制。
4. 經常需要編輯不止一個文件
創建tag文件。
將光標定位在你要查看其原型的函數名上,然后按下"[I"命令, Vim將會顯示include文件中匹配這個函數名的一個清單。
預覽標簽機制會打開一個特殊的預覽窗口,并且使光標仍然停留在你當前所在的位置,在預覽窗口中的文本列出了當前光標所在處的函數的聲明(有些可能不是聲明)將當前光標移動到另一個函數名上, 停留幾秒鐘, 預覽窗口中的內容就會變成是關于新函數名的聲明。
5. 協同作業
Unix的哲學是使用獨立的小程序,每個小程序做一項專門的任務,并且把它作好,將它們的工作整合到一起來完成一個復雜的任務。
Vim的做法是將一些分散的小程序整合起來,產生強大的處理能力,在這方面Vim還有待在將來進一步提高。
在編輯器領域, emacs是這方面的一個典范(有人甚至說它是一個能編輯文本的操作系統)
6.文本是結構化的
加速你的編輯-編譯-修改的周期。
":make" 命令編譯程序項目,捕獲編譯的錯誤/警告并允許你直接跳轉到引起這一錯誤/警告的程序行上去;
`errorformat'選項告訴Vim你的編譯器將生成何種格式的錯誤信息,以便于它能識別;
寫一些自定義的宏,如要跳轉到manual 幫助文檔, 這對于查看交叉索引是一種簡捷有效的辦法;
使用上面的三項原則可以對付任何形式的結構化文本。
7. 養成習慣
絕大多數人只需要學習其中的10-20%的命令就足以應付它們的工作了。
建立適合自己的命令集,不時地回顧以往所做的事, 看看是不是可以自動完成一些重復的工作。
不斷地重復練習你的解決方案直到你的手指可以條件反射地自動完成,從而達到你所期望的境界。
不要一次嘗試太多的東西,一次做一件事并多做幾次會好得多。
對于不經常的操作,最好記下你的處理步驟以備將來不時之需。
不管怎樣,只要目標明確。你就能找到讓你的編輯變得更加高效的辦法。
?
更多的是技能而非知識
更多的是雙手而非頭腦
轉載于:https://www.cnblogs.com/iplus/archive/2012/05/03/4464650.html
總結
以上是生活随笔為你收集整理的Linux新手生存笔记[2]——vim训练稿的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】如何选好Android开发书籍和教
- 下一篇: php标记