2013-01-01 37 views
1

有什麼辦法可以從默認'%'改變IPython魔術函數前綴嗎?我在ipython_config.py中找不到任何選項更改IPython魔術函數前綴(從'%'到':'),反正呢?

由於我使用vim和ghci,我(以某種方式)訓練自己將':'視爲命令前綴。

這很煩人,當我想打電話的神奇功能和自動前綴「:」每一個IPython的神奇的功能調用,如:CD,:ED和:負載

回答

5

神奇逃逸被硬編碼在很多地方, 但如果你想要做的是儘量減少你的vim造成的肌肉記憶的處罰, 你可以告訴inputsplitter對待你的冒號爲百分比:

import re 
from IPython.core import splitinput 
from IPython.core.inputsplitter import transform_escaped 

# this is a one-character change, adding colon to the second group, 
# so the line splitter will interpret ':' as an escape char 
splitinput.line_split = line_split = re.compile(""" 
      ^(\s*)    # any leading space 
      ([,;/%:]|!!?|\?\??)? # escape character or characters 
      \s*(%{0,2}[\w\.\*]*)  # function/method, possibly with leading % 
            # to correctly treat things like '?%magic' 
      (.*?$|$)    # rest of line 
      """, re.VERBOSE) 

# treat colon the same as percent: 
transform_escaped.tr[':'] = transform_escaped._tr_magic 

現在,你應該能夠做這樣的事情:

:cd foo 

for t in range(3): 
    :time time.sleep(t) 

如果你希望它總是被觸發,你可以把這段代碼放在一個IPython啓動文件(〜/ .ipython/profile_default/startup/whatever.py)中。

這些並不完全是公共的API,所以我不會相信他們不會搞亂任何東西,但它似乎在當前的主人工作。

+0

謝謝,您的解決方案工作! (至少現在,我最好使用默認的_%_作爲長期解決方案) 我不敢相信IPython開發人員不會使用vim並決定**硬編碼**的東西。 另外我只是好奇_%_來自哪裏? – wizzup

+0

它必須是不合法的語法,'%'只是被挑選出來。 IPython是許多原始貢獻者的第一個真正的Python項目。這是多年前完成的,只是沒有改變,因爲沒有理由(個人,我不喜歡':')。 IPython一直在進行大量的清理工作,這應該能夠使這種更直接的變化。雖然這個過程還沒有完成。 – minrk

+0

關於清理工作的任何消息?許多控制檯都有它們的魔術變量和函數,它們可能會延遲前綴字符($,:,%,>,?等)。所以真正讓事情可配置是最好的選擇。我認爲這並不難。 – zoujyjs

相關問題