命令列編輯(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
+ w
與 Meta
+ Del
是不同的,因為字的邊界不一定是空白字元。Octave 會將剪下的文字儲存在一個 kill-ring 緩衝區中,而 kill-ring 中的資料可以使用下面的指令貼上:
Ctrl
+y
:貼上 kill-ring 中最頂端的文字。Meta
+y
:旋轉 kill-ring 並貼上最頂端的文字,這個指令只有在上一個指令是Ctrl
+y
或Meta
+y
時可以使用。
kill-ring 可以想像是一個會轉動的環狀緩衝區,每次呼叫 Meta
+ y
就會將 kill-ring 轉動一格,並貼上最頂端的文字。以上兩個指令常常需要配合使用,若要貼上的文字不是最後一次剪下的,則必須先使用 Ctrl
+ y
貼上最後一次剪下的文字,再用 Meta
+ y
選取要貼上的文字。
Ctrl
+ k
代表剪下而 Ctrl
+ y
代表貼上是來自於於英文的 killing 與 yanking。編輯文字
以下指令用於編輯指令列的文字:
Ctrl
+q
或Ctrl
+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 會自動執行此暫存檔中的指令,這個功能在自行定義函數時非常有用,比起直接在命令列中定義函數方便許多。
edit_history
可以接受兩個參數,指定要編輯的指令紀錄範圍,例如要編輯從第 3
行到第 8
行的指令紀錄:
edit_history 3 8
若是只指定一個參數,就會只編輯該行指令紀錄,例如編輯第 5
行:
edit_hostory 5
若是不加任何參數,則會編輯最後一行指令紀錄。
run_history [first] [last]
與 edit_history
類似,但直接執行指定範圍的指令而不開啟編輯器。例如執行第 3
行到第 8
行的指令紀錄:
run_history 3 8