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

来源:https://www.cnblogs.com/xxctx/p/18343036
-Advertisement-
Play Games

tmux tmux(Terminal Multiplexer)是一個終端復用器,它允許你在一個單一終端視窗內運行和管理多個終端會話。通過tmux,我們可以創建、訪問和控制多個終端視窗,併在這些視窗之間自由切換。這對於遠程工作、管理多個任務和長期運行的任務非常有用。 1、安裝 tmux 在 Ubunt ...


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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 當我們需要快速測試代碼片段時,常見的做法是啟動Visual Studio或使用線上代碼編輯器。然而,Visual Studio的啟動可能較為緩慢且占用較多系統資源,而線上編輯器則可能遇到語法支持局限或網路延遲問題。 為解決這個問題,給大家推薦一款輕量級的本地C#執行工具——CSharpRepl ...
  • Spectre.Console.NET程式員可能都不陌生,寫控制台程式美化還是不錯的,支持著色,表格,圖標等相當Nice,如果對這個庫不熟悉我強烈推薦你瞭解一下,Spectre.Console.Cli作為Spectre.Console的子集,對於寫一些CLI小工具還是相當方便 本文主要講講 Spec ...
  • 一.事件回放二.主要問題剖析三.對博客園團隊的忠告 一.事件回放7 月 15 日,知名的經典博客站點 —— 博客園再次發佈了求救信,大概的意思是說現在園子又到了生死攸關的時候,需要開發者開通會員來相救。我用紅圈給大家標註了一些重點: 可以看出園子現在真的是很難了。。。不管怎麼樣,作為在博客園多年的作 ...
  • 前置 移除連接 要刪除連接,只需監聽來自連接器本身或編輯器的斷開連接事件,並刪除具有連接器作為源或目標的連接。為了簡單起見,我們將為 NodifyEditor 實現 DisconnectConnectorCommand。首先讓我們將其添加到 EditorViewModel。 public class ...
  • 在日常開發中,有時候需要將我們的程式隨著操作系統一起運行,並且無需人工干預。要實現這種效果,有很多種方法,比如:如果是桌面程式,可以設置到程式的啟動項;如果是Web程式,還可以托管到IIS中,而對於控制台程式,最常見在做法是將程式部署成Windows服務,並設置成自動運行,這樣當操作系統開機時,就會... ...
  • 拿到這道題,我們想一下,我們將整個字元串都反轉過來,那麼單詞的順序指定是倒序了,只不過單詞本身也倒序了,那麼再把單詞反轉一下,單詞不就正過來了。 所以解題思路如下: 移除多餘空格 將整個字元串反轉 將每個單詞反轉 舉個例子,源字元串為:"the sky is blue " 移除多餘空格 : "the ...
  • 前言 MethodTimer.Fody 是一個功能強大的庫,可以用於測量 .NET 應用程式中的方法的執行時間。允許你在不修改代碼的情況下,自動地測量和記錄方法的執行時間。 這個工具是基於.NET的 weaving 技術,通過修改IL(Intermediate Language,中間語言)代碼來插入 ...
  • 1、Linux文件系統概述 Linux文件系統是指操作系統用來控制文件如何存儲和檢索的結構和邏輯。 文件系統結構 根目錄: / Linux文件系統從根目錄(/)開始,這是所有文件和目錄的起點。 目錄結構: Linux使用層次化目錄結構,每個目錄包含文件和子目錄。 掛載點: 各種文件系統通過掛載點(m ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...