<!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> # 文字編輯器 Vim ###### tags: `vim` - [slide:https://hackmd.io/@ewnlm/Sk6ohKAqp] <!-- Put the link to this slide here so people can follow --> --- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 開檔 - 開啟 FILE. ```shell! % vim FILE ``` - 開啟 FILE1, FILE2 存在 vim buffer list, 並用`:n`開啟下一份檔案. ```shell! % vim FILE1 FILE2 ``` ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 開檔 - 開啟 FILE, 並直接跳到第N行. ```shell! % vim +N FILE ``` - 開啟 FILE, 並直接搜尋字串PATTERN. ```shell! % vim +/PATTERN FILE ``` ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 開檔 - 以 Tablist 開啟 FILE1, FILE2. ```shell! % vim -p FILE1 FILE2 ``` - 以 上下視窗的方式 開啟 FILE1, FILE2. ```shell! % vim -o FILE1 FILE2 % vim -O FILE1 FILE2 # 左右視窗的方式開啟 ``` --- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 模式 - 大致的模式, 透過對應按鍵切換. ```graphviz digraph vimmode { nodesep=1.0 // increases the separation between nodes node [color=Red,fontname=Courier,shape=egg] //All nodes will this shape and colour edge [color=Blue, style=dashed] //All the lines look like this 開啟vim->命令模式 命令模式 -> 插入模式 [label="i,a"] 命令模式 -> 指令模式 [label=":"] edge [color=red, style=dashed] 指令模式 -> 命令模式 [label="ESC"] 插入模式 -> 命令模式 [label="ESC"] } ``` --- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 按鍵 `h` (左), `l`(右); `j`(下), `k`(上) - ==數字+(指令)是很有威力的功能, 且適用很多地方== - 例如, `10j` 往下移動十行。 - `ctrl+f` (下一頁, forward); `ctrl+b` (上一頁, backward) ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 在同一畫面裡, - `H` 游標移至畫面頂端 - `M` 游標移至畫面中線 - `L` 游標移至畫面底端 ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 移動所在游標至畫面指定處. 將游標所在的行, 放至畫面的 - `zt` 頂端 - `zz` 中間 - `zb` 底部 - 將所在行移至中間,方便看前後行內容. - 移至底部,方便看之前內容. - 移至頂端,方便看後面內容. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下, `gg`移動至整份檔案開頭 - `G`移動至整份檔案結尾 - 在第一行才有用, 一樣在命令模式下, 輸入`n%`(n為數字0~100), 可移動整份檔案百分之n處. - 例如, `50%`可移動至整份檔案中間處. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下 - 按鍵`0`, 移動游標至行首. - 按鍵`^`, 移動游標至整行第一個字首. - 按鍵`$`, 移動游標至行尾. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下 - 按鍵`w`, 移動至下一個字的字首, 不包含符號, 也就是以空白或符號當間隔的下個字字首. - 按鍵`e`, 移動至下一個字的字尾, 規則同上. - 按鍵`b`, 倒退至前一個字的字首, 規則一樣同上. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下 - 按鍵`W`, 類似`w`, 但是只有空白當間隔. - 意思就是可以跳的比較遠,例如, `if(a>b)`, 可直接跳到下一個敘述. - 按鍵`E`, 類似`e`, 只認空白當間隔. - 按鍵`B`, 類似`b`, 規則同上. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下 - 按鍵`%`, 移動至最接近的括號組合. - 括號組合包含,`()`, `[]`, `{}`. - 很適合用來找程式缺少的括號. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下 - 按鍵`fx`, 以游標為基準, 向右移動至字元x處. - 按鍵`Fx`, 以游標為基準, 向左移動至字元x處. - `x`可以為任意字元或符號, 讓你可以隨意移動指定處. - "/cygdrive/d/d/IN_PROGRAM/Work/File.txt" - 假設游標在開頭`/`處, - `6f/` 可以讓你直接移動到最後一個`/`符號. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 移動方式 - 命令模式(ESC)下 - 游標所在文字是檔案, 按鍵`gf`, 可直接開啟檔案. - `ctrl+o` 可以回上一份檔案. --- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 先確定在命令模式, 按ESC鍵可以回到命令模式. - 按鍵`i`, 在游標前插入文字 - 按鍵`a`, 在游標後插入文字 - ==善用數字== - `10a=` 在游標後連續插入10個`=`符號. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 一樣在命令模式, 按鍵`o`往下開新行 - 按鍵`O`,往上開新行. - ==善用數字== - `10o=` 在游標後連續開10行. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 按鍵`J`, 連接下一行內容. - 將游標所在行的換行符號拿掉, 則下一行的內容會連接在後. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 按鍵`cc`, 更換(change) 整行內容. - 把游標所在整行刪除, 並直接進行插入模式, 等待輸入新資料. - 搭配前述的移動方式, 可做出不同的更換. - `cw` 刪掉游標所在word, 並進行更換. - `c4l` 刪掉游標右邊四個字元, 直接插入新內容. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 按鍵`x`, 刪除游標之後的字元, 一樣維持在命令模式底下(ESC). - 按鍵`X`, 刪除游標之前的字元. - `x`算是最後動作, 所以修飾的量詞要放在前面. - 例如, `5x`, 刪除游標之後的五個字元. - 刪除後, 一直會留在命令模式. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 同樣是刪除, 按鍵`d`變化更多. 類似`c` change. - `dd` 刪除整行。 - 搭配前述的移動方式,可以做出 - `dw` 刪除一個字. - `d$` 從游標處刪至行尾. - `dG` 從游標處刪至檔案結尾. - 同`x`, 動作完一樣留在命令模式下. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 按鍵`r`(replace), 取代游標當下的字元. - 按鍵`r`之後會變成輸入模式, 直接按下想替換的字即可. - 一樣可以用數字連續取代n個字. `nr` 刪掉游標右邊n個字元, 並進入插入模式. - 與`r`不同的是, 按鍵`R`會留在取代模式, 一直蓋掉後面的文字直到按`ESC`鍵. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 復原 - ==很重要!很重要!== - `u` (undo)復原上一動, 可以無限還原至剛開啟的狀態. - `ctrl+r` redo. 一樣沒有次數限制. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 排版 - `>>`, `<<` 在命令模式下, 將整行左移或右移. - `gg=G` 命令模式下, 將整份檔案調整成 c-style indent. ---- <!-- .slide: data-transition="zoom" --> <!-- .slide: data-background="https://hackmd.io/_uploads/rkZ8MIjbi.png" --> ## 編輯 - 按鍵`y`(yank)
{"title":"文字編輯器. Vim","breaks":true,"description":"Brief of Vim","showTags":"true","contributors":"[{\"id\":\"0b93a0f4-2322-4e3e-9569-2c17e87a9819\",\"add\":8639,\"del\":2360}]"}
    255 views