[TOC]
## Linux vi/vim
所有的 Unix Like 系統都會內建 vi 文書編輯器,其他的文書編輯器則不一定會存在。
但是目前我們使用比較多的是 vim 編輯器。
vim 具有程序編輯的能力,可以主動的以字體顏色辨別語法的正確性,方便程序設計。
vim是vi的高級版本,比如有代碼高亮
## Vim的三種模式
**命令模式**
讀取、查找、保存文件等操作
**編輯模式**
對內容進行編輯、復制等操作,當按下I ,i,o,O,a,A,r,R鍵進入編輯模式
**一般模式**
移動光標,復制,刪除等操作
### 使用vim
~~~
vim index.php //打開文件
按i鍵 //進入編輯模板,輸入內容
按esc //返回一般模式
按:wq //保存退出
~~~
## vim快捷鍵說明
<table>
<thead>
<tr>
<th>按鍵</th>
<th>功能</th>
</tr>
</thead>
<tbody><tr>
<td><font color="red">i</font></td>
<td>在光標之前插入</td>
</tr>
<tr>
<td><font color="red">a</font></td>
<td>在光標之后追加</td>
</tr>
<tr>
<td>I</td>
<td>在一行的開頭處插入</td>
</tr>
<tr>
<td>A</td>
<td>在一行的結尾處追加</td>
</tr>
<tr>
<td><font color="red">o</font></td>
<td>在光標所在位置的下一行打開新行插入</td>
</tr>
<tr>
<td><font color="red">O</font></td>
<td>在光標所在位置的上一行打開新行插入</td>
</tr>
<tr><td width="160">:w</td>
<td>將編輯的數據寫入硬盤檔案中(<span class="text_import2">常用</span>)</td></tr>
<tr><td>:w!</td>
<td>若文件屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入,
還是跟你對該檔案的檔案權限有關啊!</td></tr>
<tr><td>:q</td>
<td>離開 vi (<span class="text_import2">常用</span>)</td></tr>
<tr><td>:q!</td>
<td>若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。</td></tr>
<tr><td colspan="2">注意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有『強制』的意思~</td></tr>
<tr><td>:wq</td>
<td>儲存后離開,若為 :wq! 則為強制儲存后離開
(<span class="text_import2">常用</span>)</td></tr>
<tr><td>:w [filename]</td>
<td>將編輯的數據儲存成另一個檔案(類似另存新檔)</td></tr>
<tr><td width="22%">h 或 向左箭頭鍵(←)</td>
<td>光標向左移動一個字符</td></tr>
<tr><td>j 或 向下箭頭鍵(↓)</td>
<td>光標向下移動一個字符</td></tr>
<tr><td>k 或 向上箭頭鍵(↑)</td>
<td>光標向上移動一個字符</td></tr>
<tr><td>l 或 向右箭頭鍵(→)</td>
<td>光標向右移動一個字符</td></tr>
<tr><td colspan="2">
如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動光標。
如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵,
亦即加上想要進行的次數(數字)后,按下動作即可!</td></tr>
<tr><td>[Ctrl] + [f]</td>
<td>屏幕『向下』移動一頁,相當于 [Page Down]按鍵
(常用)</td></tr>
<tr><td>[Ctrl] + [b]</td>
<td>屏幕『向上』移動一頁,相當于 [Page Up] 按鍵
(常用)</td></tr>
<tr><td>[Ctrl] + [d]</td>
<td>屏幕『向下』移動半頁</td></tr>
<tr><td>[Ctrl] + [u]</td>
<td>屏幕『向上』移動半頁</td></tr>
<tr><td>+</td>
<td>光標移動到非空格符的下一行</td></tr>
<tr><td>-</td>
<td>光標移動到非空格符的上一行</td></tr>
<tr><td>n<space></td>
<td>那個 n 表示『數字』,例如 20 。按下數字后再按空格鍵,光標會向右移動這一行的 n
個字符。例如 20<space> 則光標會向后面移動 20 個字符距離。</td></tr>
<tr><td>0 或功能鍵[Home]</td>
<td>這是數字『 0 』:移動到這一行的最前面字符處
(常用)</td></tr>
<tr><td>$ 或功能鍵[End]</td>
<td>移動到這一行的最后面字符處(常用)</td></tr>
<tr><td>H</td>
<td>光標移動到這個屏幕的最上方那一行的第一個字符</td></tr>
<tr><td>M</td>
<td>光標移動到這個屏幕的中央那一行的第一個字符</td></tr>
<tr><td>L</td>
<td>光標移動到這個屏幕的最下方那一行的第一個字符</td></tr>
<tr><td>G</td>
<td>移動到這個檔案的最后一行(常用)</td></tr>
<tr><td>nG</td>
<td>n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20
行(可配合 :set nu)</td></tr>
<tr><td>gg</td>
<td>移動到這個檔案的第一行,相當于 1G 啊!
(常用)</td></tr>
<tr><td>n<Enter></td>
<td>n 為數字。光標向下移動 n 行(常用)</td></tr>
<tr><th colspan="2"><font color="#FFFFFF">搜索替換</font></th></tr>
<tr><td>/word</td>
<td>向光標之下尋找一個名稱為 word 的字符串。例如要在檔案內搜尋 vbird
這個字符串,就輸入 /vbird 即可!
(常用)</td></tr>
<tr><td>?word</td>
<td>向光標之上尋找一個字符串名稱為 word 的字符串。</td></tr>
<tr><td>n</td>
<td>這個 n 是英文按鍵。代表重復前一個搜尋的動作。舉例來說,
如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字符串,則按下 n 后,會向下繼續搜尋下一個名稱為 vbird
的字符串。如果是執行 ?vbird 的話,那么按下 n 則會向上繼續搜尋名稱為 vbird 的字符串!</td></tr>
<tr><td>N</td>
<td>這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。
例如 /vbird 后,按下 N 則表示『向上』搜尋 vbird 。</td></tr>
<tr><td colspan="2">
使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重復的找到一些你搜尋的關鍵詞!
</td></tr>
<tr><td>:n1,n2s/word1/word2/g</td>
<td>n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字符串,并將該字符串取代為
word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 并取代為 VBIRD 則:<br>
『:100,200s/vbird/VBIRD/g』。(常用)</td></tr>
<tr><td>:1,$s/word1/word2/g</td>
<td>從第一行到最后一行尋找 word1 字符串,并將該字符串取代為
word2 !(常用)</td></tr>
<tr><td>:1,$s/word1/word2/gc</td>
<td>從第一行到最后一行尋找 word1 字符串,并將該字符串取代為
word2 !且在取代前顯示提示字符給用戶確認 (confirm)
是否需要取代!(常用)</td></tr>
<tr><th colspan="2"><font color="#FFFFFF">刪除、復制與貼上</font></th></tr>
<tr><td>x, X</td>
<td>在一行字當中,x 為向后刪除一個字符 (相當于 [del] 按鍵),
X 為向前刪除一個字符(相當于 [backspace] 亦即是退格鍵)
(常用)</td></tr>
<tr><td>nx</td>
<td>n 為數字,連續向后刪除 n 個字符。舉例來說,我要連續刪除 10 個字符,
『10x』。</td></tr>
<tr><td>dd</td>
<td>刪除游標所在的那一整行(常用)</td></tr>
<tr><td>ndd</td>
<td>n 為數字。刪除光標所在的向下 n 行,例如 20dd 則是刪除 20 行
(常用)</td></tr>
<tr><td>d1G</td>
<td>刪除光標所在到第一行的所有數據</td></tr>
<tr><td>dG</td>
<td>刪除光標所在到最后一行的所有數據</td></tr>
<tr><td>d$</td>
<td>刪除游標所在處,到該行的最后一個字符</td></tr>
<tr><td>d0</td>
<td>那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字符</td></tr>
<tr><td>yy</td>
<td>復制游標所在的那一行(常用)</td></tr>
<tr><td>nyy</td>
<td>n 為數字。復制光標所在的向下 n 行,例如 20yy 則是復制 20
行(常用)</td></tr>
<tr><td>y1G</td>
<td>復制游標所在行到第一行的所有數據</td></tr>
<tr><td>yG</td>
<td>復制游標所在行到最后一行的所有數據</td></tr>
<tr><td>y0</td>
<td>復制光標所在的那個字符到該行行首的所有數據</td></tr>
<tr><td>y$</td>
<td>復制光標所在的那個字符到該行行尾的所有數據</td></tr>
<tr><td>p, P</td>
<td>p 為將已復制的數據在光標下一行貼上,P 則為貼在游標上一行!
舉例來說,我目前光標在第 20 行,且已經復制了 10 行數據。則按下 p 后,
那 10 行數據會貼在原本的 20 行之后,亦即由 21 行開始貼。但如果是按下 P 呢?
那么原本的第 20 行會被推到變成 30 行。
(常用)</td></tr>
<tr><td>J</td>
<td>將光標所在行與下一行的數據結合成同一行</td></tr>
<tr><td>c</td>
<td>重復刪除多個數據,例如向下刪除 10 行,[ 10cj ]</td></tr>
<tr><td>u</td>
<td>復原前一個動作。(常用)</td></tr>
<tr><td>[Ctrl]+r</td>
<td>重做上一個動作。(常用)</td></tr>
<tr><td colspan="2">這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~
利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦!</td></tr>
<tr><td>.</td>
<td>不要懷疑!這就是小數點!意思是重復前一個動作的意思。
如果你想要重復刪除、重復貼上等等動作,按下小數點『.』就好了!
(常用)</td></tr>
</tbody></table>
## vim的swp暫存文件
在通過vim進行文件編輯時,會生成以.swp為后綴的暫存文件,這樣當我們意外中斷時,可以用于恢復編輯內容。
詳細使用:http://www.runoob.com/linux/linux-vim.html
- 序言
- 第一章:準備工作
- 寫在學習之前的話
- web應用開發結構
- 開發工具/環境
- 第二章:展現層面(HTML/CSS)
- HTML簡介
- HTML基礎
- HTML編碼
- HTML鏈接
- HTML圖像
- HTML列表
- HTML表單
- HTML表格(分水嶺)
- HTML 實體
- HTML框架
- CSS層疊樣式表
- CSS選擇器
- CSS文本/字體
- CSS繼承和疊加
- CSS框模型
- CSS浮動(分水嶺)
- CSS定位
- CSS背景
- CSS圖標字體
- CSS補充
- 開發技巧
- 第三章:展現層面(Javascript)
- JS簡介
- JS實現
- JS輸出交互
- JS變量
- JS數據類型
- JS運算符
- JS流程控制(分水嶺)
- JS函數
- JS數組
- JS對象(分水嶺)
- JS數組對象
- JS字符串對象
- JS數學對象
- JS日期對象
- JS BOM對象(分水嶺)
- JS DOM對象
- JS事件對象
- JS元素對象
- JS DOM節點
- 第四章:展現層面(Jquery)
- JQ簡介
- JQ使用
- JQ選擇器
- JQ篩選
- JQ屬性
- JQ-CSS
- JQ事件
- JQ文檔處理
- JQ效果
- JQ-ajax
- 第五章:邏輯/業務層面(PHP)
- PHP簡介
- PHP變量
- PHP數據類型
- PHP常量
- PHP運算符
- PHP流程控制
- PHP函數(分水嶺)
- PHP日期
- PHP數學
- PHP數組
- PHP字符串
- PHP正則表達式(分水嶺)
- PHP目錄操作
- PHP文件
- PHP上傳/下載
- PHP面向對象(分水嶺)
- PHP圖像處理
- PHP會話控制
- Ajax異步處理
- PHPMysql擴展
- PHPMysqli擴展
- PHPPdo擴展
- PHP接口
- PHP命名空間
- 第六章:邏輯/業務層面(框架設計)
- 第七章:存儲層面(mysql)
- Mysql基礎
- Mysql Sql簡介
- Mysql數據庫
- Mysql數據類型
- Mysql數據表
- Mysql操作記錄
- Mysql查詢
- Mysql修改表結構
- Mysql日期與時間
- Mysql分組統計
- Mysql多表查詢
- Mysql安全
- Mysql存儲引擎
- Mysql事務
- Mysql視圖
- Mysql觸發器
- Mysql存儲過程
- Mysql存儲函數
- Mysql優化
- 第八章:服務器(Linux)
- Linux介紹與安裝
- Shell
- 目錄與文件操作
- VIM編輯器使用
- 帳號管理
- SUDO
- 權限控制
- 壓縮與打包
- 軟件安裝
- 計劃任務
- 進程管理
- 寶塔Linux面板