tmux
tmux(Terminal Multiplexer)是一個終端複用器,它允許你在一個單一終端視窗內執行和管理多個終端會話。透過tmux,我們可以建立、訪問和控制多個終端視窗,並在這些視窗之間自由切換。這對於遠端工作、管理多個任務和長期執行的任務非常有用。
1、安裝 tmux
在 Ubuntu 上安裝 tmux :
-
更新包列表:
sudo apt update
-
安裝 tmux:
sudo apt install tmux
-
配置 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(窗格)
定義:
- 窗格 是視窗中的子區域。一個視窗可以被分割成多個窗格,允許你在同一個視窗中並排顯示多個終端會話。
- 窗格可以透過水平或垂直分割來建立,從而在一個視窗中同時顯示多個窗格。
特點:
- 每個窗格可以執行獨立的程式或命令,使你可以在同一個視窗中同時處理多個任務。
- 窗格的分割和調整使你可以更高效地利用螢幕空間。
之間的關係
-
會話包含視窗:
- 一個 tmux 會話可以包含多個視窗。會話是所有視窗的容器,你可以在一個會話中建立、刪除或切換視窗。
-
視窗包含窗格:
- 每個視窗可以被分割成多個窗格。窗格是視窗的組成部分,你可以在視窗中建立、調整和關閉窗格。
-
會話 → 視窗 → 窗格:
- 一個會話可以包含多個視窗,每個視窗可以包含多個窗格。這樣的層級結構允許你在一個 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
的預設模式,你可以在此模式下進行文字導航和執行命令。 - 插入模式:在此模式下,你可以像在普通文字編輯器中一樣輸入和編輯文字。在正常模式下按
i
、I
、a
、A
等鍵進入插入模式。 - 命令列模式:在此模式下,你可以輸入命令以執行各種操作。在正常模式下按
:
、?
、\
進入命令列模式。
- 正常模式:這是
模式切換:
- 從 正常模式 進入 插入模式 :按
i
、I
、a
、A
。 - 從 正常模式 進入 命令列模式 :按
:
、/
、?
。 - 從 插入模式 返回 正常模式 :按
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