# 14. 互動式輸入編輯和歷史記錄替換

有些版本的 Python 直譯器支援當前輸入內容的編輯和歷史記錄的替換 (history substitution)，類似在 Korn shell 和 GNU Bash shell 中的功能。這個功能是用 GNU Readline 函式庫來實作，它支援多種編輯的風格。這個函式庫有它自己的說明文件，在這裡我們就不重複了。

## 14.1. Tab 鍵自動完成 (Tab Completion) 和歷史記錄編輯 (History Editing)

在直譯器啟動的時候，變數和模組名稱的自動完成功能會被自動啟用，所以可以用 `Tab` 鍵來呼叫自動完成函式；它會查看 Python 的陳述式名稱、當前區域變數名稱和可用模組名稱。對於像是 `string.a` 的點分隔運算式 (dotted expression)，它會對最後一個 `'.'` 之前的運算式求值，然後根據求值結果物件的屬性，給予自動完成的建議。請注意，如果一個物件有 `__getattr__()` method（方法），同時又是該運算式的一部份，這樣可能會執行應用程式自定義的程式碼。預設設定也會把你的指令歷史記錄儲存在你的使用者資料夾內，一個名為 `.python_history` 的檔案中。在下一次啟動互動式直譯器時，這些歷史記錄依然可以被使用。

## 14.2. 互動式直譯器的替代方案

This facility is an enormous step forward compared to earlier versions of the interpreter; however, some wishes are left: It would be nice if the proper indentation were suggested on continuation lines (the parser knows if an `INDENT` token is required next). The completion mechanism might use the interpreter's symbol table. A command to check (or even suggest) matching parentheses, quotes, etc., would also be useful.

有一個功能增強的互動式直譯器替代方案，已經存在一段時間，稱為 IPython，它具有 Tab 鍵自動完成、物件探索和進階歷史記錄管理等特色。它也可以完全客製化並被嵌入到其他應用程式中。另一個類似的增強型互動式環境，稱為 bpython。