命令列編輯(Command Line Editing)

Octave 使用 GNU Readline Library 提供命令列(command-line)的操控與歷史紀錄功能,這裡只介紹一般性的功能,進階的使用技巧可以參考 GNU Readline Library。

有許多命令列的編輯功能是透過控制字元(control characters)來操作,例如 Ctrl + a 會將輸入游標移動到行首,操作方式是先按住鍵盤上的 Ctrl 鍵,在按下 a 鍵,其餘的控制字元也是以類似的方式操作。

另一種命令列的操作方式是透過 Meta 字元(Meta characters),例如 Meta + u 的輸入的方式是按住 Meta 鍵再按下 u 鍵,在一些系統中沒有 Meta 鍵,則使用 Esc 鍵,即按一次 Esc 鍵(不用按住)再輸入 u

移動游標(Cursor Motion)

以下這些指令可以用來移動游標:

  • Ctrl + b:將游標向後移動一個字元,在大部份的系統中可以使用左鍵替代。
  • Ctrl + f:將游標向前移動一個字元,在大部份的系統中可以使用右鍵替代。
  • Del:將游標左邊的一個字元刪除。
  • Ctrl + d:將游標所在的一個字元刪除。
  • Meta + f:將游標向前移動一個字(word)。
  • Meta + b:將游標向後移動一個字(word)。
  • Ctrl + a:將游標移動到行首。
  • Ctrl + e:將游標移動到行尾。
  • Ctrl + l:清除螢幕,只留下最後一行 Octave 提示符號。
  • Ctrl + _Ctrl + /:復原最後一次的編輯動作。
  • Meta + r:復原本行指令的所有編輯動作。

以上是在輸入指令時最常用的編輯指令。

Ctrl 主要用於字元(characters)的操作,而 Meta 主要用於字(word)的操作,例如 Ctrl + f 是向後移動一個字元,而 Meta + f 是向後移動一個字。

在 Octave 中也有專門的函數可以清除螢幕:

clc()
home()

clc()home() 兩個函數功能相同,都是將螢幕清除,並將游標移至第一行,這些函數可以用在 Octave 程式中。

剪下與貼上(Killing and Yanking)

Octave 的命令列支援文字的剪下與貼上,以下是相關的指令:

  • Ctrl + k:剪下從目前游標所在位置到行尾的所有文字。
  • Meta + d:剪下從目前游標所在位置向後到字的結尾之間的所有文字,若是游標剛好在字與字之間,則將下一個字結尾之前的文字剪下。
  • Meta + Del:剪下從目前游標所在位置向前到字的開頭之間的所有文字,若是游標剛好在字與字之間,則將上一個字開頭之後的文字剪下。
  • Ctrl + w:剪下從目前游標所在位置向前到前一個空白字元之間的所有文字。
Ctrl + wMeta + Del 是不同的,因為字的邊界不一定是空白字元。

Octave 會將剪下的文字儲存在一個 kill-ring 緩衝區中,而 kill-ring 中的資料可以使用下面的指令貼上:

  • Ctrl + y:貼上 kill-ring 中最頂端的文字。
  • Meta + y:旋轉 kill-ring 並貼上最頂端的文字,這個指令只有在上一個指令是 Ctrl + yMeta + y 時可以使用。

kill-ring 可以想像是一個會轉動的環狀緩衝區,每次呼叫 Meta + y 就會將 kill-ring 轉動一格,並貼上最頂端的文字。以上兩個指令常常需要配合使用,若要貼上的文字不是最後一次剪下的,則必須先使用 Ctrl + y 貼上最後一次剪下的文字,再用 Meta + y 選取要貼上的文字。

Ctrl + k 代表剪下而 Ctrl + y 代表貼上是來自於於英文的 killing 與 yanking。

編輯文字

以下指令用於編輯指令列的文字:

  • Ctrl + qCtrl + v:輸入下一個鍵入的字元,通常用在輸入特殊字元的時候。
  • Meta + Tab:輸入 Tab 字元。
  • Ctrl + t:將游標之前的一個字元連同游標向後移動,若是游標已經在行尾,則將行尾的最後兩個字元對調。
  • Meta + t:將游標的前一個字(word)連同游標向後移動。
  • Meta + u:將游標所在位置到目前的字(word)的結尾之間所有的字元轉為大寫。
  • Meta + l:將游標所在位置到目前的字(word)的結尾之間所有的字元轉為小寫。
  • Meta + c:將游標所在位置或之後的第一個字元轉為大寫,並將游標移動至該字(word)的結尾處。

自動補齊(Completion)

以下的指令提供自動補齊的功能:

  • Tab:將游標之前的文字自動補齊(completion),Octave 可以自動補齊指令與變數名稱。
  • Meta + ?:列出所有可用於游標之前的文字自動補齊,在大部分的系統中可用連續兩個 Tab 替代。

歷史紀錄(History)

Octave 會將使用者所輸入的每一行指令記錄下來,以便讓使用者可以查詢與執行已經執行過得指令,而不用再重新輸入一次,而當離開時 Octave 會將最近輸入的指令自動儲存在紀錄檔中,最多可以儲存的指令數量是由 history_size 這個變數來設定,而紀錄檔的位置則是由 history_file 變數來指定。

下面是一些瀏覽與搜尋指令紀錄的指令:

  • Enter:不管游標在哪個位置,按下 Enter 鍵之後,若是輸入的指令不是空字串,Octave 就會執行所輸入的指令並將此指令加入指令紀錄中。
  • Ctrl + p:顯示上一個指令紀錄,在大部分的系統中可用上鍵替代。
  • Ctrl + n:顯示下一個指令紀錄,在大部分的系統中可用下鍵替代。
  • Meta + <:顯示第一個指令紀錄。
  • Meta + >:顯示最後一個指令紀錄,也就是目前輸入的指令。
  • Ctrl + r:從目前在指令紀錄中的位置向前搜尋,支援 incremental search。
  • Ctrl + s:從目前在指令紀錄中的位置向後搜尋,支援 incremental search。

除了使用鍵盤指令操控指令紀錄外,Octave 也提供了一些指令可以查閱與編輯指令紀錄:

history [options]

若是不佳任何參數,history 會顯示目前的指令紀錄,亦即最近執行過的指令,其可用的參數如下:

  • -w file:將目前的指令紀錄儲存至檔案 file 中,若是沒有指定 file 參數,則會儲存至預設的紀錄檔,在一般的 UNIX 系統中預設是 "~/.octave_hist"
  • -r file:從紀錄檔中載入指令紀錄,覆蓋掉目前使用中的指令紀錄,若是沒有指定 file 參數,則會由預設的紀錄檔中讀取,在一般的 UNIX 系統中預設是 "~/.octave_hist"
  • n:只顯示最近 n 筆指令紀錄。
  • -q:不要顯示行號。

例如顯示最近 10 筆指令紀錄,而不要顯示行號:

history -q 10
edit_history [first] [last]

此指令會開啟指定的編輯器(由 EDITOR 變數指定)編輯指令紀錄,在編輯指令時 Octave 會將要編輯的指令儲存至一個暫存檔中,而編輯完成後 Octave 會自動執行此暫存檔中的指令,這個功能在自行定義函數時非常有用,比起直接在命令列中定義函數方便許多。

Octave 會在編輯器關閉之後自動執行站存檔中的指令,若想要取消則將檔案中的內容清空即可。

edit_history 可以接受兩個參數,指定要編輯的指令紀錄範圍,例如要編輯從第 3 行到第 8 行的指令紀錄:

edit_history 3 8

若是只指定一個參數,就會只編輯該行指令紀錄,例如編輯第 5 行:

edit_hostory 5

若是不加任何參數,則會編輯最後一行指令紀錄。

run_history [first] [last]

edit_history 類似,但直接執行指定範圍的指令而不開啟編輯器。例如執行第 3 行到第 8 行的指令紀錄:

run_history 3 8