# vim筆記 ## 動機 就不知道在哪還是同學講了有vim這個編輯器 想當然耳vscode上面當然是有插件的阿然後再大量爬問找到了這個網站: https://www.blog.lasai.com.tw/2020/07/05/vscode-vim-mode/?fbclid=IwAR0RoxsqMwOp9X3skdcbJbF-sgWUqasXm9YWgIl1G1rGcYzf_35OmQ8g4pk 他的設定檔在最後,抄下來之後把會衝突的或是沒有相對應檔案(我的話是問題在ICON、逗號等)改了一下就可以用了 完整影片:https://youtube.com/playlist?list=PLBd8JGCAcUAH56L2CYF7SmWJYKwHQYUDI&si=Nw2vOdTz92pReLvB 以下是我看完所有內容(除了設定)之後抄下來改的筆記 格式挺亂的 我懶得改了 Normal 模式: :w 存檔 :q 離開 :wq 存檔後離開 i 進入 Insert 模式 h 左 j 下 k 上 l 右 移动游标 h j k l 左下上右 w/W:往后移动一个单词,区别是 W 会跳过标点符号 b/B:往前移动一个单词,区别是 B 会跳过标点符号 {:移动到上一个段落 }:移动到下一个段落 gg:移动到整个文件的第一行 G:移动到整个文件的最后一行 0:移动到行首 $:移动到行尾 ^:移动到当前行第一个字符处 gk:往上一行(当一行被编辑器软换行) gj:往下一行(当一行被编辑器软换行) 搜索 - / :向后搜索 n:查找下一个 N:查找上一个 - * : 向后搜寻目前游标所在的关键字,如果存在,光标会跳转到该关键字下一次出现的地方 n:查找下一个 N:查找上一个 - ? :向前搜索 n:查找 上一个 N:查找下一个 - # 向前搜寻目前游标所在关键字,如果存在,光标会跳转到该关键字上一次出现的地方 n:查找上一个 N:查找下一个 - %s/欲被取代/取代物/g(代表global) - %s/欲被取代/取代物/gc(代表global+check(確定要刪嗎)) - 行内查找字符上一次/下一次出现的位置: f/F fx:向后搜寻同一行最近的x Fx:向前搜寻同一行最近的x zz :将光标所在行拉至屏幕中央 zt :将光标所在行拉至屏幕顶部 (t:top) zb :将光标所在行拉至屏幕底部 (b:buttom) 选取 v :进入visual模式进行选取 V:选取光标所在整行 v0/v^ :选取光标所在处到行首,区别在于 ^ 是选取到首个字符处 v$ :选取光标处到行尾 vgg:选取光标处到文件第一个字符 vG :选取光标处到文件最后一个字符 vfa :选取光标处到当前行下一个a处 vFa:选取光标处到当前行上一个a处 v{ :选取光标处到段落开头 v} :选取光标处到段落尾 ctrl+v :选取块 yank 复制 y :复制所选部分到寄存器 Y/yy :复制当前行到寄存器 2yy :复制从当前行往下2行 y0/y^ :从光标处复制到当前行行首,光标置为行首 y$ :从光标处复制到当前行行尾 yfa :从光标处复制到当前行下一个a处 yFa :从光标处复制到当前行上一个a处 yG :从当前行复制到文件尾部 ygg :从当前行复制到文件首部 "ay :将所选部分复制到a寄存器(寄存器a-z都可以使用) ## paste 粘贴 p :从光标处向后粘贴(如果复制的是整行,会贴在光标所在行的下面) P:从光标处向后粘贴(如果复制的是整行,会贴在光标所在行的上面) "ap:将a寄存器的内容粘贴 u 復原 <Ctrl-r> 重作 I 將游標移動到行首並進入到 Insert 模式 A 將游標移動到行尾並進入到 Insert 模式 o 將游標下方加一行並進入到 Insert 模式 O 將游標上方加一行並進入到 Insert 模式 x 在 Normal 模式刪除當前游標位置的字元 Visual 模式刪除選取的字元 且刪除後的內容會被放到暫存器 d 在 Visual 模式刪除選取的字元 (刪除後的內容會被放到暫存器=>有複製+刪除效果) D 刪除游標位置和同一行以後的所有字元 (刪除後的內容會被放到暫存器) dd 刪除游標位置的那一整行 dgg 刪除游標以上的所有內容(包含游標所在的那一行) dG 刪除游標以下的所有內容(包含游標所在的那一行) c 用法與 d 相同,只是執行完後會進入 Insert 模式 r 換掉游標該處的字元(replace) >> 增加該行縮排 << 減少該行縮排 :set shiftwidth=2 將縮排的大小設為兩字元(僅有改變 << 和 >> 的行為) 3>> 將游標所在處的那一行和下面的兩行增加縮排 = 將選取的地方進行自動縮排. Vim內 :e 檔名 在vim內開啟檔案 :tabe (可加黨名)新增頁籤 gt 切換到下一個頁籤 gT 切換到上一個頁籤 :new 新增水平視窗 :vnew 新增垂直視窗 <Ctrl-w>w 切換視窗 <Ctrl-w>h j k l 切換到目前視窗 左 下 上 右邊 的視窗 :edit 檔名 關閉當前檔案並開啟其他檔案 :close 關閉當前視窗 :only 只保留當前視窗 命令提示字元中 vim 檔名 利用 Vim 開啟檔案 vim -o 多個檔名 利用 Vim 開啟多個檔案,每個檔案利用水平視窗分割 vim -O 多個檔名 利用 Vim 開啟多個檔案,每個檔案利用垂直視窗分割 vim -p 檔名 利用 Vim 開啟多個檔案,每個檔案利用頁籤顯示 buffer:資料保存 window:展示資料 tab:排版布局 (Vsvim不支持buffer(sad)) Vim內 :ls 列出現在所有的 buffer <Ctrl-6> 兩個buffer交替切換 :b2 切換到第二個 buffer :b 部分檔名 切換到符合檔案名稱的檔案 :bn 切換到下一個 buffer :bp 切換到上一個 buffer :bf 切換到第一個 buffer :bl 切換到最後一個 buffer :bd 關閉目前所在的 buffer :tab ba 把全部的 buffer 以頁籤的形式顯示 命令提示字元中 vim 檔名 利用 Vim 開啟檔案 vim -o 多個檔名 利用 Vim 開啟多個檔案,每個檔案利用水平視窗分割 vim -O 多個檔名 利用 Vim 開啟多個檔案,每個檔案利用垂直視窗分割 vim 多個檔名 利用 Vim 開啟多個檔案,透過切換buffer來編輯每個檔案 V 切換到 Visual Line 模式 (一次選取整行) <Ctrl-v>切換到 Visual Block 模式 (一次選取一個區塊)(可以用在比如說在開頭切I然後加上同一個符號) I 在 Visual Block 模式一次編輯多行 Normal 模式將游標移動到行首並進入到 Insert 模式 i Visual Block 模式 inner a Visual Block 模式 around viw 選取一個 word vit 選取一個 tag 中的內容 diw 刪除一個 word ciw 刪除一個 word 並進入 Insert 模式 vi" 選取在兩個雙引號間的內容 vi{ 選取一個區塊中游標之後的內容 選取被兩個大括號包住的內容 vi} 選取一個區塊中游標之後的內容 選取被兩個大括號包住的內容 va" 選取在兩個雙引號間的內容(包含雙引號) 名詞: w=>word s=>sentance p=>paragraph t=>tag 其他成對的符號: " { [ ( < 動詞: y=>yank p=>paste d=>delete c=>change v=>visual 範圍: i=>inner a=>around 量詞:數字 組合:動詞+(量詞)+(範圍)+名詞 ^ 移動到當前行的第一個字符處(忽略tab)(比0好用) 數字G 跑到第<num>行 :set nu 顯示行號 :set nonu 隱沒行號 :數字 移動到指定行 <Ctrl-f> 移動到下一頁 <Ctrl-b> 移動到上一頁 zf 將被選取的數行摺疊成一行 zd 展開被摺疊的數行 (以上兩個在VSVIM中因為定義不同無法作用:他摺疊的是行但vscode的折疊span式) 需使用 zM 摺疊 zR 反摺疊 ~ 將游標當前的字符或選取的字符進行大小寫互換 . 重複先前做的一連串動作 J 將下面一行合併到游標所在行,或將選取的數行全部併成一行 <Ctrl-w> 在 Inset 模式刪除游標前的一個 word (終端機也適用)(cmd不可) <Ctrl-u> 在 Inset 模式刪除該行游標前的所有內容 (終端機也適用)(cmd不可) :!指令 執行終端機指令,並在執行完以後回到當前編輯畫面(不可用) :h關鍵字 查詢相關說明(不可用) 巨集(macro) q暫儲器 開始錄製 @暫儲器 播放巨集(前可加量詞 量詞可以過大他就只會做到底) @@ 播放上次播放的巨集 :reg (暫存器) 顯示所有(或指定)暫存器內容 <Ctrl-a> 遞增號碼 <Crtl-x> 遞減號碼 資源: - Vim 官方文件 https://www.vim.org/docs.php - Learn VimScript the Hard Way http://learnvimscriptthehardway.steve... - Practical Vim https://pragprog.com/book/dnvim2/prac... - Vimium https://chrome.google.com/webstore/de... - VimGolf https://www.vimgolf.com