मैं * nix के तहत ipython में vi कुंजियों का उपयोग कैसे करूं?


95

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

मैं इसे ipython में कैसे जाऊं?

नोट: यदि कोई उत्तर सभी * निक्स पर लागू होता है, तो मैं OS X को शीर्षक से हटा दूंगा :)

जवाबों:


166

हाल ही में किसी के भटकने की स्थिति में, IPython 5.0 ने रीडलाइन से शीघ्र_टॉलकिट पर स्विच किया , इसलिए इस प्रश्न का एक अद्यतन उत्तर एक विकल्प पास करना है:

$ ipython --TerminalInteractiveShell.editing_mode=vi

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

c.TerminalInteractiveShell.editing_mode = 'vi'

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

2
धन्यवाद। IPython, Jupyter, या prompt_toolkit के लिए डॉक्स में कहीं भी खोजना मुश्किल है।
nth

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

इस सवाल का मेरा जवाब कस्टम कुंजी बाँध जोड़ने का एक तरीका दिखाता है।
जेलीकोला

2
अगर मैं सामान्य मोड या इन्सर्ट मोड में हूँ तो क्या इसका कोई तरीका है?
पीयूष कुशवाहा

32

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

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

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

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


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

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


@weronika तो, set convert-meta on(और उस लाइन के नीचे कुछ भी) केवल कमांड मोड पर लागू होगा, मोड डालें नहीं।
s4y

6
नोट: यह अब IPython 5.0.0 के रूप में काम नहीं करता है। नीचे @ imiric का उत्तर देखें।
जेसन सुंदरम

11

आप अंतःक्रियात्मक रूप से वी-मोड और एमएसीएस मोड के बीच भी स्विच कर सकते हैं। रीडलाइन डॉक्स के अनुसार उन दोनों के बीच स्विच करने के लिए जिन्हें आप MCJ कुंजी संयोजन का उपयोग करने में सक्षम होने वाले हैं, लेकिन यह केवल मुझे vi-मोड पर स्विच करने की अनुमति देता है - मेरे मैक पर (जहां ESC को 'मेटा' कुंजी के रूप में उपयोग किया जाता है) ) यह है: ESC+ CTRL+ j। Emacs मोड पर वापस जाने के लिए कोई Ce का उपयोग कर सकता है लेकिन वह मेरे लिए काम नहीं करता है - मुझे इसके बजाय MCe करना था - मेरे मैक पर यह है: ESC+ CTRL+ e

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

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

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

9

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

set editing-mode vi

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


9
ipythonreadlineएक अजगर पुस्तकालय से स्विच किया जाता है prompt_toolkit, 5.0.0इसलिए यह अब काम नहीं करता है।
जेलीकोला

धन्यवाद, यह IPython के पुराने संस्करण से निपटने के लिए बहुत उपयोगी था।
टाइमगैब

8

मुझे IPython 5 में इंटरेक्टिव तरीके से मोड स्विच करने में सक्षम होने की आवश्यकता है और मैंने पाया कि आप मक्खी के शीघ्र प्रबंधक को फिर से बनाकर ऐसा कर सकते हैं:

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

0

आप अपने .ipyon स्टार्ट-अप कॉन्फिग फ़ाइल में vi सेट कर सकते हैं। यदि आपके पास ऐसा कुछ नहीं है, तो फ़ाइल को ~/.ipython/profile_default/startup/किसी चीज़ से जोड़कर बनाएं start.py। यहाँ एक उदाहरण है:

# Initializing script for ipython in ~/.ipython/profile_default/startup/
from IPython import get_ipython
ipython = get_ipython()

# If in ipython, set vi and load autoreload extension
if 'ipython' in globals():
    ipython.editing_mode = 'vi'
    ipython.magic('load_ext autoreload')
    ipython.magic('autoreload 2')
from Myapp.models import * 

यदि आप Django के साथ ipython का उपयोग करते हैं, और डिफ़ॉल्ट रूप से अपने सभी मॉडल आयात करना चाहते हैं, तो यह अंतिम पंक्ति है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.