Slide 1

Slide 1 text

VIM- 打造你的專屬編輯器 成大資訊工程 102 老魏(Lucas)

Slide 2

Slide 2 text

很久很久以前… Vim是一個文字編輯器 IDE是一個整合開發環境 Vim跟IDE比 我覺得對vim一點也不公平

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

後宮佳麗三千 • 那我該選哪個好? – 「聽說Eclipse跟JAVA還有Android整合得很好」 – 「DreamWaver在編輯完網頁之後可以馬上看 結果耶,超方便的」 – 「可是我喜歡用Notepad++,因為他版面簡單 又好用^_^」

Slide 9

Slide 9 text

後宮佳麗三千 • 那我該選哪個好? – 「我寫C,用Visual C++管理專案大好!」 – 「可是我有時候只是交個作業,還是DevC++ 好用。」 – 「你還在用那種古董編輯器喔?我現在都用 Code::Block。」 – 「那我專題寫網頁,人工智慧要寫Android、計 算理論寫Python、compiler寫lex&yacc(而且還 找不到有lex的syntax的IDE)…」

Slide 10

Slide 10 text

可以都要嘛?

Slide 11

Slide 11 text

太好了 • 只是如果今天我要引入Library… • 我習慣字體大小要16、背景要黑色才不會 傷眼睛。 • 我在Linux&Windows上都要開發,所以編 碼最好都改成UTF-8。 • 所以我要一個一個調…

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

你需要的是,一個 百變的編輯器

Slide 14

Slide 14 text

主角登場

Slide 15

Slide 15 text

為什麼該用VIM? • 純粹的Linux哲學-要什麼自己選擇 • 所有事情鍵盤可以搞定 • 游標移動快速 • 跟shell有高度的整合 – 可以呼叫系統程式 • 安裝plug-in方便 – 網路上很多高手幫我們完成了很多事情 • 可以把自己常做的事情定義好,一鍵完成 – 可以用一個按鍵就顯示「老魏好帥」 • 上千種配色,可以挑個自己喜歡的 • Terminal介面就可以開啟,方便遠端編輯 – SSH到遠端的時候不用把資料下載回來改

Slide 16

Slide 16 text

現在我覺得… 拿vim跟IDE比 對IDE一點也不公平

Slide 17

Slide 17 text

開檔 • vim hello.c

Slide 18

Slide 18 text

存檔 • :w 存檔 • :q! 關閉檔案,但不存檔 • :wqal 存檔、並且關閉分頁

Slide 19

Slide 19 text

你已經會vim了!

Slide 20

Slide 20 text

首先談模式 • 避免混淆,今天只介紹三種! –Normal mode –Insert mode –Visual mode

Slide 21

Slide 21 text

模式 Normal mode Insert mode Visual mode

Slide 22

Slide 22 text

為什麼要有這些模式? • 透過一些約定俗成的快速鍵(Ctrl-C, Ctrl-V..)就可以在編輯文章 中快速呼叫這些功能。這種編輯器的特色是學習門檻很低,要 記憶的只有一些特殊的快速鍵,即使不記得也能透過menu bar 找到。這樣子的UI具有容易學習(高learnability)、不容易忘記 (高memorability)、不容易產生Errors、一般用起來也不會有太 大不滿(satisfaction)。一切看起來都很美好,唯一的問題是, 這種編輯器的efficiency到底是好還是不好?…vi的這種設計避 免了快速鍵的組合爆炸(想想看如果把各種組合都對應到一個 ctrl-alt快速鍵會有多少個..),並且讓使用者能完全使用鍵盤來 精確、快速的編輯一個文件,一旦熟悉這種操作後,手都不用 離開鍵盤,不管是寫程式或是寫文章都有了一種人機合一的流 暢感,心中想到哪裡游標就能精確移動到哪裡,不管多複雜的 文字操作都能快速解決,心中的爽快感其實是難以用筆墨形容 的。 • From vgod’s blog

Slide 23

Slide 23 text

移動 • 在編寫程式的過程中,快速的移動,就跟 一隻英雄有突進技能一樣的

Slide 24

Slide 24 text

傳統編輯方式 • int banama = return_function(apple, orange); 怎麼辦?變成巴拿馬了?

Slide 25

Slide 25 text

傳統編輯方式 • int banama = return_function(apple, orange); ←

Slide 26

Slide 26 text

傳統編輯方式 • int banama = return_function(apple, orange); ←

Slide 27

Slide 27 text

傳統編輯方式 • int banama = return_function(apple, orange); ←

Slide 28

Slide 28 text

傳統編輯方式 • int banama = return_function(apple, orange); ←

Slide 29

Slide 29 text

傳統編輯方式 • int banama = return_function(apple, orange); ←

Slide 30

Slide 30 text

傳統編輯方式 • int banama = return_function(apple, orange); ← 好多好多…

Slide 31

Slide 31 text

傳統編輯方式 • int banaa = return_function(apple, orange); Backspace

Slide 32

Slide 32 text

傳統編輯方式 • int banana = return_function(apple, orange); n

Slide 33

Slide 33 text

傳統編輯方式 • int banana = return_function(apple, orange);

Slide 34

Slide 34 text

vim編輯方式 • int banama = return_function(apple, orange); Fm

Slide 35

Slide 35 text

vim編輯方式 • int banama = return_function(apple, orange); r

Slide 36

Slide 36 text

vim編輯方式 • int banana = return_function(apple, orange); n

Slide 37

Slide 37 text

vim編輯方式 • int banana = return_function(apple, orange); n

Slide 38

Slide 38 text

操作 • d - delete • c - change • y - yank(複製) • p - paste • s – substitute • r - replace • u – undo • +r - redo • dd – 整行剪下(可當刪 除用) • yy – 整行複製 • cc – 整行刪除,並且 進入insert mode • >> - 向右縮排 • << - 向左縮排

Slide 39

Slide 39 text

移動

Slide 40

Slide 40 text

補習班最愛教解題技巧 • int banana = return_function(apple, orange); • int banana = D

Slide 41

Slide 41 text

補習班最愛教解題技巧 • int banana = return_function(apple, orange); • int banana = (apple, orange); de

Slide 42

Slide 42 text

補習班最愛教解題技巧 • int banana = return_function(apple, orange); • int banana = return_function( ); di(

Slide 43

Slide 43 text

總之有很多!

Slide 44

Slide 44 text

小技巧 • Vim有很多操作是可以配合數字鍵一起使用 的! • 善用”.“可以重複上一次的操作

Slide 45

Slide 45 text

視窗&分頁

Slide 46

Slide 46 text

視窗 • 輸入”:” command-line mode 水平分割 垂直分割 +[hjjk] 可以切換操作視窗 +w 可以跳到下一個視窗 :sp :vsp

Slide 47

Slide 47 text

Quickfix • 寫程式可以呼叫vim內建的make系統 – 或者寫makefile,只要輸入”:make”就會執行 • 如果編譯有問題,可以呼叫quickfix的小視 窗在底下,來看哪裡有bug。 – vim可以辨識錯誤的位置,enter就會跳到該位 置上

Slide 48

Slide 48 text

分頁 • Vim –p a b c 開啟的時候就有a、b、c分頁 • 編輯的過程中可以開啟分頁 • +Page Down • +Page Up 可以在不同tabe之間切換 :tabe tab.c

Slide 49

Slide 49 text

My .vimrc 自我介紹 我的名字叫.vimrc 我可以在你開啟vim的時候 幫你設定好任何事情! 而且你不必付我任何一毛錢!

Slide 50

Slide 50 text

My .vimrc • 位置:~/.vimrc (/home/lucas/.vimrc) – 如果一開始找不到就自己創建一個 • 在Linux下開頭為”.”的檔案不會顯示 ls -al

Slide 51

Slide 51 text

常用的設定 • :set autoindent – 自動縮排 • :set background=dark – 設定使用”深色主題“的高亮度 • :syntax on – 設定詞彙高亮度 • :set number – 開啟行號 • :set highlightsearch – 搜尋單字時背景高亮度 • :set cursorline – 底線

Slide 52

Slide 52 text

設定一個tab的空白個數 • :set softtabstop=4 • :set shiftwidth=4 • :set tabstop=4

Slide 53

Slide 53 text

command-line mode的參考選項 • :set wildmenu • :set wildmode=list:full

Slide 54

Slide 54 text

Folding(摺疊)

Slide 55

Slide 55 text

Folding • set foldmethod=syntax • set foldlevel=10 • zc 折疊起來 • zo 打開 – +-- 23 行: int init(char* file, char* max----------

Slide 56

Slide 56 text

mapping • vmap – 僅在反白模式時作用(Visual mode) • nmap – 僅在常態模式時作用(Normal mode) • imap – 僅在插入模式時作用(Insert mode)

Slide 57

Slide 57 text

為了防止對應到重覆的熱鍵... 加入nore! • vnoremap – 僅在反白模式時作用(Visual mode) • nnoremap – 僅在常態模式時作用(Normal mode) • inoremap – 僅在插入模式時作用(Insert mode)

Slide 58

Slide 58 text

範例 " Hot key mapping { "Toggle nerd tree :noremap :NERDTreeToggle "Toggle Taglist :noremap :TlistToggle "quickly shift that line UP or DOWN :noremap :m+ :noremap :m-2 "Don't show pyc files let NERDTreeIgnore=['\.pys$'] "} “ 開頭是註解的意思

Slide 59

Slide 59 text

“我的” .vimrc

Slide 60

Slide 60 text

小技巧 • Vim也是有滑鼠可以用的,你可以在你 的.vimrc內設定 – :set mouse=a

Slide 61

Slide 61 text

搜尋與取代 來幾行改幾行!

Slide 62

Slide 62 text

搜尋 • 進入Normal mode,打”/”後面就可以接 regular expresion來尋找相符合的字詞 • n下一個 • N上一個 • #、*尋找目前游標所在的字 – This is an apple – 就可以找”apple”

Slide 63

Slide 63 text

取代 • 方式 :[範圍] s / [被取代] / [取代者] / [參數] • 範圍: – 1,100 我想要在1到100行做操作 – 1,$ 我想要從1到最後一行 – .,$ 我想從現在到最後一行 – % 所有範圍 = 1,$

Slide 64

Slide 64 text

取代 • 參數: – g 全部都要取代 – c 確認視窗 – i 忽略大小寫 • 範例 – :40,78s/orange/banana/gi

Slide 65

Slide 65 text

補習班又來教技巧了 • orange • apple • banana • banana command: :%s/orange\|apple/banana/g

Slide 66

Slide 66 text

補習班又來教技巧了 • 限制選取: \< 前面不要 \>後面不要 word /the /\ /\ wether ○ athe ○ ○ the ○ ○ ○ ○ then ○ ○

Slide 67

Slide 67 text

補習班又來教技巧了 • 撰寫html內容,可是每行後面都要
[36] Please send pdf or word file. [37] Send your HW with mail title: [38] Theory of Computation [36] Please send pdf or word file.
[37] Send your HW with mail title:
[38] Theory of Computation
command: :36,38s/$/
/g

Slide 68

Slide 68 text

補習班又來教技巧了 • 把\n\r取代成\n • hello world\n\r • hello world\n command: :%s/\r//g

Slide 69

Slide 69 text

補習班又來教技巧了 • 清除printf debug法 • 但要小心會連其他的printf都一起刪除 command: :g/printf/d

Slide 70

Slide 70 text

好像也不怎麼樣阿... • 錯! – 善用regular expresion它可以變得很巨強大 – 使用他來更改很多作業系統間的編碼問題 – 遇到很糟糕的code可以用它來簡單排版,然後 呼叫vim內建的排版來整理。

Slide 71

Slide 71 text

小技巧 • 當你把程式碼整理到一定程度的換行以後! 可以輸入gg=G呼叫系統內部的縮排系統來 幫你縮排,以便看清楚程式碼

Slide 72

Slide 72 text

Plug-in • Pathogen • AutoClose—Alves • NeoComplCache • The Nerd Tree • SnipMate ---(神器!必用) • EasyMotion • Taglist

Slide 73

Slide 73 text

安裝方法 • 選好自己喜歡的plug-in以後 drwxr-xr-x+ 1 Lucas None 0 三月 22 11:14 autoload drwxr-xr-x+ 1 Lucas None 0 三月 22 11:14 doc drwxr-xr-x+ 1 Lucas None 0 三月 22 11:14 ftplugin drwxr-xr-x+ 1 Lucas None 0 三月 22 11:14 indent drwxr-xr-x+ 1 Lucas None 0 三月 22 11:14 plugin drwxr-xr-x+ 1 Lucas None 0 三月 22 11:14 syntax • 放入~/.vim/的資料夾下(沒有就自己建) • 在看有沒有初始設定需要寫入.vimrc即可

Slide 74

Slide 74 text

NeoComplCache

Slide 75

Slide 75 text

The Nerd Tree

Slide 76

Slide 76 text

SnipMate

Slide 77

Slide 77 text

EasyMotion

Slide 78

Slide 78 text

總結 • 指令不用全部記起來,反射性的使用最重要。 • 了解你自己的需求是什麼,不要別人叫你裝什 麼就裝什麼,儘管他既不會變慢,也不會當機。 • 如果寫程式是一輩子的事情,你為什麼不選個 好一點的編輯器。 • 最後,就算你還是不想用vim,但花點時間讓 你的工具變得更鋒利吧!

Slide 79

Slide 79 text

• 本剪報許多圖片來自網路, 如有侵犯煩請告知。 • 感謝即使人不在也友情贊助 的CrBoy大大 • 歡迎來信討論:D