99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

第4章 文本和緩沖區(qū)

2018-02-24 15:48 更新

第 4 章 文本和緩沖區(qū)

在日常工作過(guò)程中,你使用復(fù)制和粘貼的次數(shù)遠(yuǎn)超你的想象。使用 tmux,可以直達(dá)你需要終端輸出緩沖區(qū)屏幕回滾的地方來(lái)查看緩沖區(qū)里那些已經(jīng)不在屏幕范圍的內(nèi)容。你還可能需要復(fù)制一段文字然后把它復(fù)制到一個(gè)文件或另一個(gè)程序里。本章將會(huì)介紹如何管理 tmux 會(huì)話里的文本。你會(huì)學(xué)習(xí)到如何使用鍵盤操作 tmux 的輸出緩沖區(qū),如何使用多重粘貼緩沖區(qū),以及如何使用系統(tǒng)剪貼板。

4.1 使用復(fù)制模式滾動(dòng)輸出

在終端里使用程序時(shí),程序的輸出常由于內(nèi)容過(guò)多而不停滾動(dòng)以致超出了屏幕范圍。使用 tmux,可以通過(guò)鍵盤來(lái)向前翻動(dòng)輸出緩沖區(qū),這樣就可以看到錯(cuò)過(guò)的內(nèi)容。這個(gè)功能在運(yùn)行測(cè)試或是審閱日志文件時(shí)尤其有用。

按下 PREFIX [ 鍵會(huì)進(jìn)入復(fù)制模式,然后就可以使用光標(biāo)移動(dòng)鍵在屏幕里移動(dòng)光標(biāo)。默認(rèn)地,光標(biāo)移動(dòng)鍵是箭頭鍵。在第 2 章,我們?cè)谂渲梦募锸褂昧?Vim 模式的移動(dòng)鍵,這樣就可以在窗口之間移動(dòng)以及重繪面板大小時(shí)不用把手移出鍵盤的主操作區(qū)。tmux 里有一個(gè)使用 vi 模式操作緩沖區(qū)的功能。要開啟這個(gè)功能,請(qǐng)把下面這行代碼添加到你的 .tmux.conf 文件里:

setw -g mode-keys vi

這個(gè)配置可以使用 h,j,kl 鍵在緩沖區(qū)里移動(dòng)。要離開復(fù)制模式,只需按下 ENTER 鍵(回車鍵,譯者注)。但是一次移動(dòng)一個(gè)字符顯然是不怎么高效的。那么既然我們開啟了 vi 模式,我們也可以使用其它 vi 的快捷鍵在緩沖區(qū)里移動(dòng)。

例如,可以使用 w 鍵跳到下一個(gè)單詞,使用 b 鍵回跳一個(gè)單詞。也可以使用 f 鍵,后面跟隨任意字符來(lái)跳到當(dāng)前行的指定字符,使用 F 鍵回跳。

在緩沖區(qū)里快速移動(dòng)

當(dāng)緩沖區(qū)里輸出了多個(gè)頁(yè)面時(shí),在滾屏之間使用光標(biāo)移動(dòng)并不是很高效。取代單詞之間移動(dòng)或是字符之間移動(dòng)的一種方式,就是在緩沖區(qū)里一頁(yè)一頁(yè)的滾動(dòng),或者是跳轉(zhuǎn)到緩沖區(qū)的頂部或底部。

可以使用 Ctrl b 向上翻滾一屏或是使用 Ctrl f 向下翻滾一屏,使用 g 鍵跳轉(zhuǎn)到緩沖區(qū)歷史的最頂部,也可以使用 G 鍵跳轉(zhuǎn)到緩沖區(qū)歷史的最底部。

查找緩沖區(qū)

如果知道要查找什么內(nèi)容的話我們就不必一頁(yè)頁(yè)的在數(shù)百行內(nèi)容之間瀏覽。在復(fù)制模式里按下 ? 鍵,可以向上查找短語(yǔ)或關(guān)鍵詞。只需按下 ? 鍵,輸入要查詢的短句,然后按下 ENTER 鍵就會(huì)跳轉(zhuǎn)到第一個(gè)匹配的短句。然后按下 n 鍵跳轉(zhuǎn)到下一個(gè)匹配,或者按 N 移動(dòng)到上一個(gè)匹配。

要向下查找,你需要按下 / 鍵而不是 ? 鍵。按下 n 鍵會(huì)跳轉(zhuǎn)到下一個(gè)匹配而按下 N 鍵會(huì)跳轉(zhuǎn)到上一個(gè)匹配。

學(xué)習(xí)以這種方式在緩沖區(qū)之間移動(dòng)會(huì)極大地加快你的速度。輸入想要移動(dòng)到的單詞而不是使用箭頭來(lái)移動(dòng)會(huì)更快,尤其是在查找日志文件的輸出時(shí)會(huì)更明顯。

這只是一些使用緩沖區(qū)的基本知識(shí)。下面我們來(lái)學(xué)習(xí)如何復(fù)制一個(gè)面板的文本然后把它粘貼到另一個(gè)面板中。畢竟,這是 tmux 的復(fù)制模式。

4.2 復(fù)制和粘貼文本

在輸出緩存區(qū)里移動(dòng)和查找內(nèi)容只是程序的一半(意為部分功能,譯者注)。我們還會(huì)經(jīng)常需要復(fù)制一些文本。tmux 的復(fù)制模式提供了這個(gè)機(jī)會(huì),它能讓我們選擇并復(fù)制文本到一個(gè)粘貼緩存區(qū),這樣就可以把它復(fù)制到任何地方。

要復(fù)制文本,需要先進(jìn)入復(fù)制模式然后把光標(biāo)移動(dòng)到要選擇的文本的開始處。然后按下 SPACE 鍵(空格鍵,譯者注)然后移動(dòng)光標(biāo)到文本的尾部。當(dāng)我們按下 ENTER 鍵后,這段被選擇的文本就會(huì)被復(fù)制到一個(gè)粘貼緩存區(qū)中。

要粘貼剛才捕捉的內(nèi)容,則切換到粘貼模式然后按下 PREFIX ] 鍵。

下面我們來(lái)學(xué)習(xí)一些特定的方式來(lái)從主輸出緩沖區(qū)里復(fù)制和粘貼文本。

捕捉面板

tmux 有一個(gè)非常方便的快捷鍵可以把整個(gè)面板的可視內(nèi)容全部復(fù)制到一個(gè)粘貼緩存區(qū)里。只需要按下 PREFIX : 鍵進(jìn)入命令模式然后輸入

capture-pane

接下來(lái)就可以使用 PREFIX ] 鍵把內(nèi)容復(fù)制到當(dāng)前焦點(diǎn)會(huì)話里。

顯示并保存緩存區(qū)

顯示粘貼緩存區(qū)的內(nèi)容,只需要在命令模式里使用 show-buffer 命令,或者是在終端會(huì)話里使用如下命令:

$ tmux show-buffer

使用 save-buffer 命令可以把緩存區(qū)保存到一個(gè)文件里,而且這是實(shí)時(shí)的保存。事實(shí)上,可以捕捉當(dāng)前緩存區(qū)并保存到一個(gè)文本文件,就像這樣:

$ tmux capture-pane && tmux save-buffer buffer.txt

或者在命令模式里使用 capture-pane; save-buffer buffer.txt 命令。當(dāng)然,如果你想的話,可以把這個(gè)操作定義為一個(gè)快捷鍵。

使用多重粘貼緩存區(qū)

tmux 保留了一個(gè)粘貼緩存區(qū)的棧空間,也就是說(shuō)可以多次復(fù)制文本而無(wú)需替換緩沖區(qū)里已有的內(nèi)容。這比操作系統(tǒng)提供的傳統(tǒng)剪貼板要便捷得多。

每次我們復(fù)制一些新的文本時(shí), tmux 就會(huì)創(chuàng)建一個(gè)新的粘貼緩存區(qū),把新的緩存放在棧的最頂端。

為了更清楚的描述,下面我們來(lái)創(chuàng)建一個(gè)新的 tmux 會(huì)話然后打開一個(gè)文本編輯器例如 Vim 或 Nano。在編輯器里,輸入以下句子,每句話占用一行空間:

First sentence is first.
Next sentence is next.
Last sentence is last.

現(xiàn)在復(fù)制一些文本到粘貼緩存區(qū)里。按下 PREFIX [ 鍵進(jìn)入復(fù)制模式。移動(dòng)到第一個(gè)句子的開始處,按下 SPACE 鍵開始選擇文本,移動(dòng)到第一句話的末端,然后按下 ENTER 鍵選擇整句話。然后對(duì)第 2 句話和第 3 句話重復(fù)剛才的操作。

每次我們復(fù)制文本時(shí),tmux 都創(chuàng)建一個(gè)新的緩存區(qū)??梢酝ㄟ^(guò) list-buffers 命令查看這些緩存區(qū)。如下:

0: 22 bytes: "Last sentence is last."
1: 22 bytes: "Next sentence is next."
2: 24 bytes: "First sentence is first."

按下 PREFIX ] 鍵會(huì)總是粘貼第 0 個(gè)緩存內(nèi)容,輸入 choose-buffer 命令來(lái)選擇一個(gè)特定的緩存區(qū)然后把它的內(nèi)容粘貼到焦點(diǎn)面板中。

把當(dāng)前窗口分為兩半,然后在第 2 個(gè)面板中打開 Nano 程序,然后進(jìn)入命令模式輸入以下命令:

choose-buffer

你會(huì)看到一個(gè)列表顯示如圖12(選擇一個(gè)文本緩存并插入)所示。你可以選擇列表中的任意一個(gè),按下 ENTER,文本就會(huì)被插入到指定的面板。

document/2015-09-09/55efaba410fd3

圖12 - 選擇一個(gè)文本緩存并插入

這種方式來(lái)管理多重文本非常棒,當(dāng)你在使用一個(gè)字符界面的環(huán)境卻無(wú)法進(jìn)入剪貼板時(shí)尤其有用。

這些緩存會(huì)在 tmux 會(huì)話的運(yùn)行過(guò)程中被共享,因此我們可以把粘貼緩存中的內(nèi)容從一個(gè)會(huì)話復(fù)制到另外一個(gè)里。

自定義復(fù)制和粘貼快捷鍵

如果你習(xí)慣使用 Vim 而且用復(fù)制和粘貼命令比較頻繁,你可以在你的配置文件里重新定義這兩個(gè)命令的快捷鍵。例如,可以把 ESCAPE 鍵(ESC 鍵,譯者注)定義為進(jìn)入復(fù)制模式,使用 y 鍵(yank,復(fù)制,譯者注)把文本復(fù)制到緩存區(qū),使用 v 鍵進(jìn)入視圖模式(Visual mode,譯者注)選擇文本,然后使用 p 鍵(paste,譯者注)粘貼文本,配置如下:

unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection

如果你經(jīng)常在窗口和面板之間大量使用復(fù)制和粘貼操作的話,這樣的配置會(huì)極大程度地提高你的工作效率,而且這些快捷鍵都是你非常熟悉的 Vim 快捷鍵。

4.3 在 Linux 使用剪貼板

使用 xclip 實(shí)用工具可以集成 Linux 系統(tǒng)上的剪貼板,這樣你就可以在不同程序之間更加便捷地進(jìn)行復(fù)制和粘貼操作。

首先你需要安裝 xclip 工具。在 Ubuntu 系統(tǒng)上,使用如下命令:

$ sudo apt-get install xclip

然后通過(guò) xclip 來(lái)使用 tmux 的 save-bufferset-buffer 命令。

要把當(dāng)前緩存區(qū)的內(nèi)容復(fù)制到系統(tǒng)剪貼板,我們?cè)?.tmux.conf 文件里添加如下命令:

bind C-c run " tmux save-buffer - | xclip -i -sel clipboard"

這個(gè)配置定義了 PREFIX CTRL-c 快捷鍵來(lái)捕獲當(dāng)前緩存區(qū)的內(nèi)容然后通過(guò)管道輸出到 xclip 程序里。可以把下面這個(gè)命令也添加到配置文件里,這樣就可以使用 PREFIX CTRL-v 快捷鍵把系統(tǒng)剪貼板的內(nèi)容復(fù)制到 tmux 會(huì)話中來(lái):

bind C-v run " tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"

這個(gè)命令會(huì)把 xclip 的內(nèi)容輸出到一個(gè)新的 tmux 緩存區(qū)里然后把它粘貼到當(dāng)前的 tmux 窗口或面板。

4.4 使用 OS X 剪貼板命令

如果你是一個(gè) Mac 用戶,你會(huì)比較熟悉 OS X 的命令行剪貼板工具 pbcopypbpaste。這些簡(jiǎn)單的工具使得你在使用剪貼板時(shí)更加方便。pbcopy 命令把文本復(fù)制到系統(tǒng)剪貼板,pbpaste 命令把內(nèi)容粘貼出來(lái)。例如,你可以一起使用 pbcopycat 命令,這樣就可以很方便地把 .tmux.conf 文件的配置復(fù)制到剪貼板,然后可以把它粘貼到電子郵件或是 Web 上,就像這樣:

$ cat ~/.tmux.conf | pbcopy

這樣操作文本確實(shí)很方便,但是 tmux 并沒(méi)有權(quán)限訪問(wèn)這些工具,在 tmux 會(huì)話里并不能直接使用它們??梢允褂靡粋€(gè)由 Chris Johnsen 編寫的包裝程序(wrapper program)來(lái)突破這個(gè)限制。Github 鏈接

要使用這個(gè)包裝腳本,首先克隆這個(gè)項(xiàng)目到本地然后編譯它。代碼如下:

$ git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
$ cd tmux-MacOSX-pasteboard/
$ make reattach-to-user-namespace

然后,把文件移動(dòng)到 PATH 路徑下的某個(gè)位置,例如 /usr/local/bin,代碼如下:

$ sudo mv reattach-to-user-namespace /usr/local/bin

最后,配置 tmux 來(lái)使用這個(gè)包裝程序,把下面這行命令添加到 .tmux.conf 文件中:

set -g default-command "reattach-to-user-namespace -l /bin/bash"

這個(gè)配置會(huì)讓 tmux 的新窗口能夠通過(guò)包裝腳本加載 Bash shell。如果你使用的是其它 shell,你需要在配置里修改它的指定路徑或命令。

重新加載配置文件之后,就可以使用 pbcopy 命令了。這樣還會(huì)有個(gè)額外的好處,就是可以把當(dāng)前 tmux 緩存區(qū)的內(nèi)容添加到系統(tǒng)剪貼板里了,命令如下:

$ tmux show-buffer | pbcopy

或者可以粘貼剪貼板里的內(nèi)容,像這樣:

$ tmux set-buffer pbpaste; tmux paste-buffer

這就意味著我們可以創(chuàng)建鍵盤快捷鍵來(lái)做這個(gè)操作,就像我們?cè)?4.3 章節(jié)里所做的那樣。但是很不幸,我們使用的包裝程序無(wú)法和 tmux 的 run 命令一起使用。好在有解決方案,可以在 pbpastepbcopy 命令前添加包裝程序的前綴。所以,為了支持復(fù)制功能,我們?cè)谂渲梦募镆@樣定義一個(gè)快捷鍵:

bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"

同樣,要支持從系統(tǒng)剪貼板粘貼內(nèi)容,需要把下面這個(gè)超級(jí)長(zhǎng)的命令添加到配置文件里,要注意,這個(gè)命令必須都在同一行里:

bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer"

這樣就用一個(gè)簡(jiǎn)單的辦法解決了一個(gè)比較復(fù)雜的技術(shù)問(wèn)題。

4.5 接下來(lái)做什么?

要想在緩存區(qū)和剪貼板之間來(lái)移動(dòng)文本,你可以在一個(gè)沒(méi)有剪貼板的環(huán)境中創(chuàng)建一個(gè),比如當(dāng)你登錄了服務(wù)器的控制臺(tái)或是一個(gè)沒(méi)有圖形界面的終端。能夠在一個(gè)很長(zhǎng)的控制臺(tái)的輸出歷史之間來(lái)回滾動(dòng)會(huì)幫我們做很多事情。僅僅這個(gè)功能,就值得你在服務(wù)器上安裝 tmux。

現(xiàn)在我們對(duì) tmux 里如何移動(dòng),切換窗口或面板有了比較詳細(xì)的了解,可以在日常中使用 tmux 工作了。對(duì)很多開發(fā)人員來(lái)說(shuō),結(jié)對(duì)編程也是日常工作的一部分。接下來(lái)我們會(huì)學(xué)習(xí)如何使用 tmux 和其他開發(fā)人員合作。

以備參考

快捷鍵

快捷鍵 描述
PREFIX [ 進(jìn)入復(fù)制模式
PREFIX ] 粘貼當(dāng)前緩存區(qū)的內(nèi)容
PREFIX = 列出所有粘貼緩存區(qū)并粘貼選中的緩存內(nèi)容

復(fù)制模式移動(dòng)鍵(VI 模式)

命令 描述
h, j, k, 和 l 移動(dòng)光標(biāo),分別表示向左,向下,向上和向右
w 以一個(gè)單詞為單位向前移動(dòng)光標(biāo)
b 以一個(gè)單詞為單位向后移動(dòng)光標(biāo)
f 后跟隨任意字符 移動(dòng)光標(biāo)到指定字符的下一個(gè)匹配位置
F后跟隨任意字符 移動(dòng)光標(biāo)到指定字符的前一個(gè)匹配位置
CTRL -b 向上翻滾一個(gè)屏幕的位置
CTRL - f 向下翻滾一個(gè)屏幕的位置
g 跳轉(zhuǎn)到緩存區(qū)的頂部
G 跳轉(zhuǎn)到緩存區(qū)的底部
? 在緩存區(qū)內(nèi)向后查找
/ 在緩存區(qū)內(nèi)向前查找

命令模式

命令 描述
show-buffer 顯示當(dāng)前緩存區(qū)內(nèi)容
capture-pane 捕捉指定面板的可視內(nèi)容并復(fù)制到一個(gè)新的緩存區(qū)
list-buffers 列出所有的粘貼緩存區(qū)
choose-buffer 顯示粘貼緩存區(qū)并粘貼選擇的緩存區(qū)內(nèi)的內(nèi)容
save-buffer [filename] 保存緩存區(qū)的內(nèi)容到指定文件里
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)