{%hackmd BJrTq20hE %} <style> .markdown-body:not(.next-editor) pre{ background-color: #101010; } </style> # Readline * 日期:2023.07.19 (三) * 報告者:[name=峻浩],[name=戴智濤] [toc] ## 簡介 Readline 是一個用於處理命令行輸入的庫,它提供了強大的編輯和自動完成功能,Readline 庫被廣泛應用於各種 Unix/Linux 系統中,是 Bash Shell 的一部分 Readline 庫提供了兩種常見的文本編輯器: * **`Emacs` 模式**:`Emacs` 是一個流行的文本編輯器,Bash 的 <font color=gree> 默認編輯模式 </font>就是 `Emacs` 模式。在 `Emacs` 模式下,可以使用類似於 `Emacs` 編輯器的快捷鍵來編輯命令行 * **`Vi/Vim` 模式**:`Vi/Vim` 是另一個廣泛使用的文本編輯器,在 `Vi/Vim` 模式下,可以使用類似於 `Vi/Vim` 編輯器的快捷鍵來編輯命令行 (`Vi/Vim` 以下簡稱 `Vi`) `Emacs` 按鍵通常標記方法: ``` E - Esc M - Meta (許多鍵盤 Meta 鍵都標記為 Alt) A - Alt (macOS:option鍵) C - Ctrl (*macOS:command鍵) S - Shift *快捷鍵 ``` <!-- 若要在 Bash 中切換編輯模式,可以使用以下命令: * 切換到 `Emacs` 模式: `set -o emacs` * 切換到 `Vi` 模式: `set -o vi` 可以將這些命令添加到 `~/.bashrc` 文件中,以便在每次啟動終端時自動設置所選的編輯模式: ```bash= # 打開 .bashrc nano .bashrc 或 vi .bashrc # 在尾端增加 "set -o emacs" / "set -o vi" # 可以用 "Alt + /" 或 "Ctrl + End" 快捷鍵到尾端 (nano模式) # 可以用 Shift + g 快捷鍵(即g的大寫字母)到尾端 (vi模式) ``` 或者 ```bash echo "set -o emacs" >> .bashrc ``` :::info `nano` 是一個獨立的文本編輯器,並不是 Readline 的編輯模式 ::: 無論選擇使用 `Emacs` 模式還是 `Vi` 模式,Readline 都提供了許多功能和快捷鍵,以提高在命令行中編輯和操作的效率,可以根據個人偏好選擇合適的編輯模式 --> ## 技巧 [Emacs Readline 編輯速查表](https://catonmat.net/ftp/readline-emacs-editing-mode-cheat-sheet.pdf) Readline 有許多常用的快捷鍵可用於增強命令行的編輯和操作。以下是一些常見的 Readline 快捷鍵及功能: ### 光標移動 * `Ctrl + A`:光標會跳到行首 * `Ctrl + E`:光標會跳到行尾 * `Ctrl + B`:向左移動一個字符 ( 向左箭頭 ) * `Ctrl + F`:向右移動一個字符 ( 向右箭頭 ) * `Alt + B`:向左移動一個詞(以空格或特殊字符為邊界)( `Ctrl + ←` ) * `Alt + F`:向右移動一個詞(以空格或特殊字符為邊界)( `Ctrl + →` ) ### 編輯 * `Alt + .`:插入上一個命令的最後一個參數 * `Alt + U`:將光標處的後面單詞全部變為大寫 * `Alt + L`:將光標處的後面單詞全部變為小寫 ### 刪除 * `Ctrl + D`:刪除光標處的字符,類似於 `Delete`(macOS:`fn + delete`),如果是空行,則退出當前會話 ( EOF ) * `Ctrl + H`:刪除光標前一個字符,類似於 `Backspace`(macOS:`delete`) * `Ctrl + K`:刪除從光標處到行尾的文本 * `Ctrl + U`:刪除整行 * `Ctrl + W`:刪除光標前一個詞 * `Alt + Backspace`:刪除從光標處到上一個單詞開頭的內容 ### 自動補全 * `Tab`: 自動補全命令、文件名或目錄名 * `Alt + !` : complete-command (命令) * `Alt + $` : complete-variable (變數) * `Alt + @` : complete-hostname (主機名) * `Alt + ~` : complete-username (用戶名) ### 歷史記錄 * `Ctrl + P`:選擇上一個命令(向上箭頭) * `Ctrl + N`:選擇下一個命令(向下箭頭) * `Ctrl + R`:進入歷史搜索模式 * `Ctrl + G`:退出歷史搜索模式 * `Ctrl + T`:選擇指令後不執行 ### 其他操作 * 按兩次 `Tab`: 顯示可執行的指令 * `Ctrl + L`:清屏,相當於執行 clear 命令 * `Ctrl + C`:終止當前正在運行的命令 * `Ctrl + Z`:將當前命令放入後台(暫停) * `Ctrl + S`:暫停當前正在運行的命令 * `Ctrl + Q`:繼續當前正在運行的命令 ```bash while [ 1 ]; do SUM=$(($SUM+1)); echo $SUM; done ``` # 參考資料 * [讀書會資料](https://linux.die.net/man/1/bash) * [參考資料來源1](https://docs.huihoo.com/homepage/shredderyin/readline.html) * [參考資料來源2](https://linux.cn/article-12706-1.html) * [參考資料來源3](https://tiswww.case.edu/php/chet/readline/readline.html#Readline-Bare-Essentials)