iT邦幫忙

2025 iThome 鐵人賽

DAY 24
2

嗨!歡迎回到上班族的 vim 生存手冊。好!我們繼續 vim 的主題,上個章節提到不能用 Ctrl + C 複製了,現在變成離開 Insert Mode,到底要怎麼複製?

先別說這個了,你知道用鍵盤也能選字嗎?先來討論這個。

Visual Mode

請先回到 Normal Mode,按下 v 會進入 Visual Mode,用前一章節提到的方向鍵(或是 h, j, k, l)移動文字光標,會發現文字被選取起來了。
離開這個模式一樣是 ESC 或是 Ctrl + C (其實 Ctrl + [ 也行)。 在前一章也提到 vim 的指令有分大小寫,讀者可以嘗試 V ,會注意到文字光標會一次選擇一整行。

選取後按下 y 就可以複製囉 (y 是 yank 的意思),用 p 就可以貼上內容。另外,yy 可以直接複製一整行。

這節介紹的指令

  • v: 進入 Visual Mode,一次選一個字
  • V: 進入 Visual Mode,一次選一行
  • y:複製
  • yy:複製一整行,或是用 Y
  • p:在目前位置貼上
  • P:在目前位置前面貼上

不過讀者切換到其他的編輯器或是程式,應該會發現貼上的內容不是 vim 所複製的內容,vim 複製的內容只局限於 vim 自身(或是套用了 vim 環境的外掛,會只限於該編輯器),要怎麼讓 vim 複製後所有環境都能存取呢?

連結系統的剪貼簿

vscode 的外掛最簡單,直接進入設定開啟 Vim: Use System Clipboard 選項即可。
用 ideavim 則和 vim 本身設定方式類似,都是需要在設定檔調整。

vim

請編輯這個檔案:

$ vim ~/.vimrc

如果不存在,請建立他:

$ touch ~/.vimrc

請加入以下的設定 (偷吃步是用右鍵 -> 貼上 😋):

set clipboard=unnamed,unnamedplus

儲存離開後,重新開啟 vim。

ideaVim

設定同 vim 本身,只是設定檔不一樣,請調整這個檔案(不存在則請建立):

$ vim ~/.ideavimrc

加入與 vim 相同的設定即可。一樣重開後,就能直接 yank 到系統的剪貼簿,p 貼上系統的剪貼簿內容囉。

關於暫存器 (Registers)

為什麼是將 clipboard 設定成 unnamed 和 unnamedplus?上一章節提到 vim 有自己的暫存器(Register),讀者可以視為 vim 自身的剪貼簿。然而 vim 不只有一個,是有「很多個」暫存器。

在這之中,有連結到系統相關的暫存器,分別是:

  • * : 連結到系統的 Primary 剪貼簿。(應該只有 Linux 系統有),在 Linux 之中,在 Terminal 裡頭選擇文字之後會自動複製,就是進到這個剪貼簿。
    • 這個功能叫 Copy on select,星星可以這樣理解:Star is select
  • + : 連結到系統的 Clipboard 剪貼簿,就是大家熟悉的系統剪貼簿。
    • + 號可以這樣理解:Ctrl plus C

基本上在 macOS 和 Windows 上,*+ 都是連結到系統的 Clipboard 剪貼簿,所以沒差。
設定檔裡頭的設定值:

  • unnamed:將 vim 剪貼簿連結到 * 暫存器
  • unnamedplus:將 vim 剪貼簿連結到 + 暫存器

更多 Normal Mode 指令

回到話題,如果你不知道現在在哪個 Mode,按下幾次 ESC 總是可以回到 Normal Mode。

插入文字的方法

先前介紹過 i 可以在文字光標的位置進入插入模式(Insert Mode)。

  • I:在行頭進入 Insert Mode
  • a:在文字光標後進入 Insert Mode
  • A:在行末進入 Insert Mode
建立新行
  • o:在下一行建立新行,並進入 Insert Mode
  • O:在上一行建立新行,並進入 Insert Mode
文字置換
  • cw:替換文字,從文字光標的地方為起始點。按法就是依序鍵入 c + w

移動文字光標的方法

上一章節介紹用方向鍵,或是 h, j, k, l 等鍵進行文字光標的移動。
這一次來介紹這些方式:

到行頭
  • ^:到行頭 (不含空白字元)
  • 0:到行頭(含空白字元)
到行尾
  • g_:到行尾(不含空白字元),這就是鍵入 g + _ 這樣按。
  • $:到行尾(含空白字元)

搜尋文字

  • /<文字>:這有點像 command mode,在 / 後方輸入文字就能搜尋內容。
    • 是不是很像 less 呢?
    • n:找「下一個」符合的目標
    • N:找「上一個」符合的目標

復原/重做

  • u:復原
  • Ctrl + R:重做,取消復原

存檔

上一章節介紹了幾個在 Command Mode 存檔的方式,一起來複習一下:

  • :q:離開
  • :wq :儲存,並離開
  • :w:存檔
  • :q!:直接離開不儲存
  • :x:如果需要存檔,就存檔,不然就直接離開
  • :saveas <路徑>:另存新檔

打個比方,另存到我的文件,並命名成 test.txt

:saveas ~/Document/text.txt
在 Normal Mode 之下
  • ZZ:儲存後,離開 vim,同 :wq
  • ZQ:直接離開 vim,同 :q!

開啟文件

用 Command Mode 來開啟文件:

  • :e <路徑>:開啟路徑指定的文件

結語

請讀者利用時間熟悉以上指令,這幾乎可以在 vim 裡頭完成基本的文字編輯了。不過 vim 的介紹即將要在這裡告一個段落,畢竟這是命令列的系列文章,不是 vim 的。
同時,本章也是進階觀念篇的結束,一開始先安利了 fish shell,接著重新介紹了資料的流向,可以重新導向資料的輸出、輸入,並介紹了 tee 指令。
再用巨大篇幅介紹了 Shell Script,如何判讀權限,如何調整權限⋯ 等內容,還一起實作了一個 Shell Script。
最後介紹了傳說中的編輯器 vim,並將目標放在讀者開啟 vim 時能自信地編輯文件,而不是搞不懂怎麼用就離開,希望有完成這個任務。
接下來即將進入生活品質篇,筆者會介紹好用的設定、調整,讓讀者在使用時體驗更加分,我們下次見囉!

References


上一篇
Day23 進階觀念篇:所到之處,都聽到你的名子 vim
系列文
上班族的命令列 (CLI) 生存手冊24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
chiaominchang222
iT邦新手 5 級 ‧ 2025-10-08 22:38:42

選起來 買尬 話說你排版也好美 行走的總編輯

0
AndyAWD
iT邦新手 2 級 ‧ 2025-10-08 23:02:35

夢回 TOOCON

我要留言

立即登入留言