tmux和vim精簡教程(非常詳細實用!)

小程xy發表於2024-08-05

tmux

tmux(Terminal Multiplexer)是一個終端複用器,它允許你在一個單一終端視窗內執行和管理多個終端會話。透過tmux,我們可以建立、訪問和控制多個終端視窗,並在這些視窗之間自由切換。這對於遠端工作、管理多個任務和長期執行的任務非常有用。

1、安裝 tmux

在 Ubuntu 上安裝 tmux :

  1. 更新包列表:

    sudo apt update
    
  2. 安裝 tmux:

    sudo apt install tmux
    
  3. 配置 tmux:

    編輯 ~/.tmux.conf, 可以對 tmux 進行設定, 比如: 預設tmux 是不支援滑鼠滾動顯示內容, 滑鼠選擇對應的窗格, 不只是拉動分割線調整窗格大小的

    步驟 1:編輯 ~/.tmux.conf

    nano ~/.tmux.conf
    

    步驟 2:修改內容

    這裡我們把 tmux 預設的字首按 修改成了 ctrl + a, 預設是 ctrl + b (個人習慣ctrl + a比較容易按, 感覺)。
    下面講的命令當中 ctrl + a 預設是 ctrl + b

    # 設定新的字首鍵為 Ctrl + a
    unbind C-b
    set-option -g prefix C-a
    bind-key C-a send-prefix
    # 啟用滑鼠支援
    set -g mouse on
    

    步驟3: 重新載入 tmux 配置

    tmux source-file ~/.tmux.conf
    

2、tmux 的結構

tmux 包括三個部分

Session(會話)

定義

  • 會話 是 tmux 的最頂層容器。它代表了一個獨立的終端環境,可以包含多個視窗。
  • 每個會話都是獨立的,意味著你可以在不同的會話之間切換,每個會話可以有自己的視窗和窗格。

特點

  • 會話可以在後臺執行,允許你在會話中斷開連線後仍然保留其狀態,稍後可以重新連線。
  • 在一個會話中,可以執行不同的任務或程式,每個會話可以配置不同的工作環境。

Window(視窗)

定義

  • 視窗 是會話中的一個虛擬終端。每個視窗可以視為一個獨立的工作區域,類似於你在一個終端中開啟的不同標籤頁。
  • 一個會話可以包含多個視窗,每個視窗可以顯示不同的終端會話或任務。

特點

  • 視窗之間可以快速切換,使你可以在同一個會話中方便地切換不同的工作任務。
  • 每個視窗都有自己的獨立終端會話和命令列環境。

Pane(窗格)

定義

  • 窗格 是視窗中的子區域。一個視窗可以被分割成多個窗格,允許你在同一個視窗中並排顯示多個終端會話。
  • 窗格可以透過水平或垂直分割來建立,從而在一個視窗中同時顯示多個窗格。

特點

  • 每個窗格可以執行獨立的程式或命令,使你可以在同一個視窗中同時處理多個任務。
  • 窗格的分割和調整使你可以更高效地利用螢幕空間。

之間的關係

  1. 會話包含視窗

    • 一個 tmux 會話可以包含多個視窗。會話是所有視窗的容器,你可以在一個會話中建立、刪除或切換視窗。
  2. 視窗包含窗格

    • 每個視窗可以被分割成多個窗格。窗格是視窗的組成部分,你可以在視窗中建立、調整和關閉窗格。
  3. 會話 → 視窗 → 窗格

    • 一個會話可以包含多個視窗,每個視窗可以包含多個窗格。這樣的層級結構允許你在一個 tmux 例項中組織和管理多個任務和工作環境。

總結

  • 會話 是 tmux 的最頂層結構,包含了多個視窗。(會話可以不止一個,可以建立多個會話)
  • 視窗 是會話中的獨立工作區域,可以進一步分割成多個窗格。
  • 窗格 是視窗中的子區域,允許在同一個視窗中並排顯示多個終端會話。
+---------------------------------------------------------+
|                           Session                      |
|                           (會話)                        |
|                                                        |
|  +---------------------+  +---------------------+      |
|  |       Window 1      |  |       Window 2      |      |
|  |       (視窗 1)       |  |       (視窗 2)       |     |
|  |                     |  |                     |      |
|  |  +-------------+    |  |  +-------------+    |      |
|  |  |   Pane 1    |    |  |  |   Pane 3    |    |      |
|  |  |  (窗格 1)   |    |  |  |  (窗格 3)   |    |       |
|  |  +-------------+    |  |  +-------------+    |      |
|  |  +-------------+    |  |  +-------------+    |      |
|  |  |   Pane 2    |    |  |  |   Pane 4    |    |      |
|  |  |  (窗格 2)   |    |  |  |  (窗格 4)   |    |       |
|  |  +-------------+    |  |  +-------------+    |      |
|  +---------------------+  +---------------------+      |
|                                                        |
+---------------------------------------------------------+


2、tmux常用命令

啟動 tmux

開啟終端,輸入以下命令啟動 tmux 會話:

tmux

# 這將啟動一個新的 tmux 會話,並自動進入該會話。

# 預設會建立一個 session 、 一個 window 、 一個 pane。 輸入 `tmux` 後進入的是 pane。

# 當 當前widow的所有pane都關閉的時候, 當前的window會自動關閉, 當 當前session的所有window都關閉時 當前的session會自動關閉

窗格管理

  • 將視窗拆分為上下兩個窗格:

    Ctrl + a 然後按 "
    
  • 將視窗拆分為左右兩個窗格:

    Ctrl + a 然後按 %
    
  • 在窗格之間切換:

    Ctrl + a 然後按箭頭鍵
    
  • 關閉當前窗格:

    Ctrl + d
    
  • 複製窗格內容

    1. 進入複製模式:
        Ctrl + a 然後按 [
        
    2. 使用箭頭鍵移動游標,選擇要複製的文字。可以使用 `Shift + 箭頭鍵` 來選擇多行內容。
    
    3. 按下 `Enter` 鍵以複製選定的文字。
    
    4. 在其他位置貼上文字:
        Ctrl + a 然後按 ]
    
  • 全屏 當前窗格 和 退出 當前窗格

    Ctrl + a 然後按 z
    

會話管理

  • 掛起當前會話

    Ctrl + a 然後按下 d
    
  • 選擇性的開啟掛起的會話

    Ctrl + a 然後按 s
    ← → 分別控制 展開和摺疊
    ↑ ↓ 分別控制 上下移動
    

(下面的命令是在終端中輸入)

  • 開啟之前的會話

    tmux a
    
  • 建立一個session

    # 這將建立一個名字叫 mysession 的session, 並進入到這個session中
    tmux new-session -s mysession
    
    # 這將建立一個名字叫 mysession 的session, 但不進入到這個session中
    tmux new-session -s mysession -d
    tmux new-session -d -s mysession
    
  • 顯示所有的 session

    tmux ls
    
  • 進入指定的 session

    tmux attach-session -t sessionname
    
  • 關閉指定的 session

    tmux kill-session -t sessionname
    
  • 關閉所有的 session

    tmux kill-service
    

以上就是 tmux 常用的命令,還有一些是對 視窗的操作, 但是不常用,當我們需要在一個 session 中開多個視窗的時候,完全可以再建立一個 session。

vim

vim(Vi IMproved)是一個強大的文字編輯器,它基於經典的 vi 編輯器,並增加了許多功能和改進。

1. 基礎概念

  • 模式vim 有幾種模式,最常用的是正常模式(Normal Mode)、插入模式(Insert Mode)、命令列模式(Command-Line Mode)。
    • 正常模式:這是 vim 的預設模式,你可以在此模式下進行文字導航和執行命令。
    • 插入模式:在此模式下,你可以像在普通文字編輯器中一樣輸入和編輯文字。在正常模式下按 iIaA 等鍵進入插入模式。
    • 命令列模式:在此模式下,你可以輸入命令以執行各種操作。在正常模式下按 :?\ 進入命令列模式。

模式切換

  • 從 正常模式 進入 插入模式 :按 iIaA
  • 從 正常模式 進入 命令列模式 :按 :/?
  • 從 插入模式 返回 正常模式 :按 Esc
  • 從 命令列模式 返回 正常模式 :按 Enter 執行命令或 Esc 取消命令。

它們的關係如圖所示:

				      	 	 +-------------------+
				      		  |                   |
				      		  |   正常模式        |
				      		  |  (Normal Mode)    |
				       		  |     (預設)         |
				       		 +----+----------+----+
				             /          		  \
				         按 i a A         			 按 : /
				           /              			  \
				+--------v--------+ 			 +--------v--------+
				|                 | 			 |                 |
				|   插入模式      |  			|  命令列模式     |
				|  (Insert Mode)  |  			| (Command-Line   |
				|                 | 			 |      Mode)      |
				+--------+--------+ 			 +--------+--------+
				          \              			  /
				        按 Esc      			    按 Esc
				          \         			   /
				       		   +----v-----+----+
				               |          		|
				               |   正常模式		|
				               |  (Normal  		|
				               |   Mode)   		|
				               +----------------+

1. 基礎操作

1.1、游標

移動游標

h j k l: 分別控制 左右上下
↑ ↓ ← →: 分別控制 上下左右

下面這些都是正常模式下可用:

n<space>: 按下任意數字, 然後按下 space, 游標向後移動 n 位。()

home 或 0: 游標移動到本行開頭
end 或 $: 游標移動到本行結尾

G: 游標移動到最後一行開頭
gg: 游標移動到第一行開頭
n<G>: 按下任意數字n 然後按下 G, 游標移動到第n行開頭, 第一行是 1G

n<Enter>: 按下任意數字n 然後按下 Enter, 游標向下移動到n行

查詢字串

正常模式下輸入 "/"、"?" 進入命令列模式, 然後輸入 word, 回車,全文搜尋匹配 "word" 字串
/word: 向游標之下查詢匹配word的字串
?word: 向游標之上查詢匹配word的字串
n: 檢視下一個匹配"word"的字串
N: 檢視上一個匹配"word"的字串

1.2、操作文字

v: 按下 v, 然後移動游標, 會選中文字
d: 刪除選中內容,同時會複製到剪下板
dd: 刪除游標所在的一整行,同時會複製到剪下板
gg d G: 刪除所有內容。(按下 gg 游標移動到第一行開頭, 按下 d 開始刪除, 按下 G 游標移動到最後一行開頭), 當然你也可以用"gg v G d"
y: 複製選中內容
yy: 複製游標所在的一整行
p: 將剪下板的內容貼上到 游標的下一個位置 或 游標所在行的下一行
u: 撤銷
Ctrl + r: 取消撤銷
Shift + >: 將所選內容向右移
Shift + <: 將所選內容向左移

:w : 儲存
:q : 退出
:wq : 儲存退出
:wq! : 強制儲存退出

1.3、其他

:set nu : 顯示行號
:set nonu : 不顯示行號
gg = G : 格式化全部程式碼。 (按下gg回到開頭, = 格式化程式碼, G回到最後一行)
== : 格式化游標所在行的程式碼
:set hlsearch
:noh : 關閉查詢關鍵詞高亮
Ctrl + q: 取消當前正在執行的命令

:set paste : 設定成貼上模式
:set nopaste : 取消貼上模式

2. 配置檔案

以下是一個常用的 vim 配置檔案內容示例,這些配置可以提升 vim 的使用體驗。

你可以在使用者的根目錄下建立~/.vimrc檔案, 然後把下面內容貼上進去就行了

# 輸入下面命令, 然後右鍵把 vimrc 內容貼上進來
nano ~/.vimrc

# 儲存
Ctrl + O 然後回車

# 退出
Ctrl + x 

.vimrc 檔案內容

" 顯示行號
set number

" 高亮當前行
set cursorline

" 顯示行號和列號
set ruler

" 啟用語法高亮
syntax on

" 啟用檔案型別檢測和自動縮排
filetype plugin indent on

" 使用空格而不是製表符進行縮排
set expandtab

" 設定縮排寬度為 4 個空格
set shiftwidth=4
set tabstop=4

" 啟用自動縮排
set autoindent

" 啟用智慧縮排
set smartindent

" 顯示匹配括號
set showmatch

" 啟用搜尋高亮
set hlsearch

" 啟用實時搜尋
set incsearch

" 允許使用系統剪貼簿
set clipboard=unnamedplus

" 使搜尋不區分大小寫
set ignorecase

" 在搜尋時考慮大小寫
set smartcase

" 顯示搜尋提示
set showcmd

" 啟用拆分視窗
set splitbelow
set splitright

" 設定更好的撤銷功能
set undofile
set undodir=~/.vim/undodir

" 更好地顯示長行
set wrap

" 啟用摺疊功能
set foldmethod=syntax
set foldlevelstart=99

" 配置顏色方案(你可以選擇自己喜歡的主題)
colorscheme desert

" 配置狀態列
set laststatus=2

" 增強插入模式下的體驗
set backspace=indent,eol,start

" 自動儲存檔案
set autowrite

" 顯示 tab 的寬度
set list
set listchars=tab:>-,trail:.,eol:$

" 在每行末尾顯示字元
set showbreak=+++

" 高亮當前行
hi CursorLine cterm=NONE ctermbg=darkgray

" 設定歷史記錄
set history=1000

" 自動縮排格式化
set formatoptions+=cro

相關文章