2012-05-01 14 views
54

वर्तमान में बैश में मैं अपने bash प्रॉम्प्ट में vi मोड को सक्षम करने के लिए set -o vi का उपयोग करता हूं।मैं * nix के तहत ipython में vi कुंजी का उपयोग कैसे करूं?

मैं इसे ipython में कैसे प्राप्त करूं?

नोट: एक जवाब सभी * nix पर लागू होता है, तो मैं शीर्षक :) से ओएस एक्स हटा देंगे

उत्तर

89

मामले में किसी में भटक रहा है यहां हाल ही में, IPython 5.0 switched from readline to prompt_toolkit, तो इस सवाल का एक अद्यतन जवाब एक विकल्प पारित करने के लिए है:

$ ipython --TerminalInteractiveShell.editing_mode=vi 

... या यह प्रोफ़ाइल विन्यास में विश्व स्तर पर स्थापित करने के लिए (~/.ipython/profile_default/ipython_config.py; ipython profile create साथ इसे बनाने यदि आप इसे ज़रूरत नहीं है) के साथ:

c.TerminalInteractiveShell.editing_mode = 'vi' 
+2

मैं इस उत्तर को पोस्ट करने के लिए यहां आया - मुझे इसे मारने के लिए धन्यवाद :) –

+1

धन्यवाद। आईपीथन, जुपीटर, या prompt_toolkit के लिए दस्तावेज़ों में कहीं भी खोजना मुश्किल है। – jth

+1

मैं अपनी कस्टम कुंजी बाइंडिंग मैपिंग कहां जोड़ूं? – Aravinda

30

ऐसा लगता है कि एक समाधान कई अन्य ReadLine संगत ऐप्स के लिए काम करता है:

सेट अपने ~/.inputrc फ़ाइल में निम्न:

set editing-mode vi 
set keymap vi 
set convert-meta on 

स्रोत: http://www.jukie.net/bart/blog/20040326082602

+5

पर 'सेट परिवर्तित-मेटा के साथ बहुत * सावधान * हो '। यह यूनिकोड एंट्री के साथ संघर्ष करता है, इसलिए यदि आप यूनिकोड पेस्ट या टाइप करते हैं, तो आप विभिन्न घटनाओं को ट्रिगर कर सकते हैं, जो आश्चर्यजनक हो सकते हैं। उदाहरण के लिए, ü टाइप करने का प्रयास करें, और आप एक दिलचस्प परिणाम देखेंगे। – minrk

+3

क्या आप जानते हैं कि आखिरी दो पंक्तियां क्या करती हैं? एक त्वरित जांच से पता चलता है कि केवल पहली पंक्ति मूल vi keybindings देता है - मेरी इच्छा है कि मुझे पता था कि दूसरों को जोड़ने का कोई कारण था या नहीं। – weronika

+1

@weronika ऐसा लगता है ['keymap vi' सेट करें जो keymap (यानी मोड) निम्न आदेश प्रभावित करेगा] (http://stackoverflow.com/a/10002721/84745), और [' कनवर्ट-मेटा सेट करें ' बदलता है कि कुछ चाबियाँ कैसे व्यवहार करती हैं] (http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html)। मुझे यकीन नहीं है कि आपको उनकी ज़रूरत है या नहीं। – s4y

8

ipython रीडलाइन लाइब्रेरी का उपयोग करता है और यह ~/.inputrc फ़ाइल का उपयोग कर कॉन्फ़िगर करने योग्य है। आपको लगता है कि फाइल करने के लिए

set editing-mode vi 

जोड़ने सभी readline आधारित अनुप्रयोगों Emacs के बजाय vi शैली कीबाइंडिंग का उपयोग करने के लिए कर सकते हैं।

+7

'ipython'' readline' से '5.0.0' में' prompt_toolkit' नामक एक पायथन लाइब्रेरी में स्विच किया गया है, इसलिए यह अब काम नहीं करता है। – jellycola

10

आप भी वी-मोड और एमैक्स मोड के बीच इंटरैक्टिव स्विच कर सकते हैं। उनके बीच स्विच करने के लिए readline docs के मुताबिक आप एमसीजे कुंजी संयोजन का उपयोग करने में सक्षम होना चाहिए, लेकिन ऐसा लगता है कि मुझे केवल मैक पर स्विच करने की अनुमति मिलती है - जहां मैक (जहां ईएससी 'मेटा' कुंजी के रूप में उपयोग किया जाता है) यह है: ईएससी + CTRL + जे। वापस Emacs मोड में स्विच करने के लिए एक सी-ई का उपयोग कर सकते हैं, लेकिन यह मेरे लिए काम करने के लिए प्रकट नहीं किया था - मैं बजाय करने के लिए एम सी ई था - अपने Mac पर यह है: ESC + CTRL +

FYI करें मेरी ~/.inputrc की स्थापना की है इस प्रकार है:

set meta-flag on 
set input-meta on 
set convert-meta off 
set output-meta on 
+0

मैं यह पता लगाने की कोशिश कर रहा हूं कि एम-सी-जे इस समय क्यों काम नहीं कर रहा था! – shangxiao

2

मैं IPython 5 में सहभागी मोड स्विच करने में सक्षम होने की जरूरत है और मैंने पाया आप मक्खी पर शीघ्र प्रबंधक पुनः करके कर सकते हैं:

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli() 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^