क्या मैं विम में Alt कुंजी मैप कर सकता हूं?


90

मैंने निम्न पंक्ति को .vimrc में जोड़ने के लिए मैप करने की कोशिश की, लेकिन यह काम नहीं करता है। मैंने .vimrc को Vim द्वारा लोड किया है।

map <Alt-D> <C-D>

क्या इस मैपिंग में कोई त्रुटि है?


क्या आप किसी टर्मिनल, या gui संस्करण (gvim, macvim) में विम का उपयोग कर रहे हैं?
निक नॉल्ससन

यह भी ध्यान दें कि यदि encodingमैपिंग के चलने के बाद आपके परिवर्तन होते हैं, तो आप अपनी ऑल्ट कीज़ से जो बाहर निकलते हैं, वह आपके द्वारा शुरू में सेट किए गए से मेल नहीं खा सकता है।
डैश-टॉम-बैंग

जवाबों:


136

मैक उपयोगकर्ताओं के लिए: ALT + hjkl मैप करने के लिए, इसके बजाय उत्पन्न वास्तविक वर्ण का उपयोग करें (INSERT मोड में संयोजन के दौरान कौन सा वर्ण का उपयोग करें), उदाहरण के लिए मेरे कीबोर्ड से मुझे प्राप्त होता है:

<ALT+j> ==> ª
<ALT+k> ==> º

और इसी तरह। समाधान StackOverflow पर यहाँ पाया ।

मैंने इसे अपने .vimrc पर प्रयोग करके ALT + k \ j के साथ लाइनों को ऊपर और नीचे ले जाने के लिए उपयोग किया है:

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

जैसा यहाँ बताया गया है

आशा है कि यह उपयोगी है, विम का आनंद लें :)

ADDENDUM BY Dylan_Larkin (2019): इसके लिए मैक पर काम करने के लिए, " मेटा के रूप में उपयोग करें विकल्प " को टर्मिनल में बंद करना होगा- > प्राथमिकताएं -> कीबोर्ड


10
यह वही है जो मैं यहाँ आया था (अल्ट्स को स्थानांतरित करने के लिए Alt + HJKL)! धन्यवाद!
जेमी स्कीमब्री

6
यह पता लगाने का एक आसान तरीका है कि यह किस वर्ण का है, का उपयोग करके है cat। बस टाइप करें catऔर बिल्ली खिड़की के अंदर आप चाहते हैं कुंजी संयोजन। पता चला कि alt + ब्रैकेट मेरे मैक पर 'और' है।
डीवीक्रॉन

4
यह विभाजन के बीच स्थानांतरित करने के लिए Alt + HJKL के रूप में महान काम करता है, मेरी उंगलियां इसे प्यार करती हैं !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
जॉन मोराल्स

3
ये सटीक मैपिंग OSX के भविष्य के संस्करणों में अपेक्षित रूप से काम नहीं कर सकते हैं। sed -n lमैपिंग को कॉन्फ़िगर करने से पहले <Ak> और <Aj> का आउटपुट देखने के लिए उपयोग करें । मेरे मामले में <अज> है और <अक> है˚
luk3thomas

4
MacOS पर, जब Use Option as Meta KeyiTerm प्रोफ़ाइल सेट या पर किया ⌥ key to Esc+जाता है, तो पारंपरिक रूप से (जैसे लिनक्स / यूनिक्स पर) व्यवहार करेंगे। इसलिए आपको मैप को वीम पर सेट करने की आवश्यकता नहीं है <^[j>, बस इसे मैप करें <A+j>या <M+j>यह काम करता है।
19

40

:help key-notationवर्णन करता है कि विभिन्न कुंजी को मैप करने के लिए किस प्रारूप का उपयोग करने की आवश्यकता है। ऊंचाई के मामले में, आप <A-या तो उपयोग कर सकते हैं या <M-। तो आपकी मैपिंग होगी

map <M-d> <C-d>

जब तक आप स्पष्ट रूप से दाएं हाथ की ओर से मैपिंग के लिए पुनर्मूल्यांकन की अनुमति नहीं देना चाहते हैं , तब तक (जैसे ) के noreसंस्करण का उपयोग करने की अनुशंसा करता हूं ।:mapnoremap


1
इसका अभी भी कोई प्रभाव नहीं है। Alt + D इनपुट अभी भी विम के लिए कुछ अजीब चरित्र इनपुट करता है।
थॉमसन

9
वह एक अलग मुद्दा है। आपका टर्मिनल विम के लिए एक बहु-बाइट चरित्र भेज रहा है और विम उस तरह की व्याख्या करना नहीं जानता है <A-d>। आपको संभवतः अपने टर्मिनल की सेटिंग्स को बदलने की आवश्यकता है, इसलिए यह इस <A-d>रूप में भेजता है <Esc>d
जामसेन

1
@jamessan iterm2 पर कैसे करें?
फिन

33

मुझे यकीन नहीं है कि अब "संभव" है। कृपया नीचे दिए गए अद्यतन को पढ़ें।

हां, आप टर्मिनल वीम में भी कर सकते हैं, लेकिन कोई वास्तविक पकड़ नहीं है । आपको मूल रूप से दो चरणों का पालन करना होगा:

  1. सुनिश्चित करें कि <M-d>संकेतन मौजूद है, और वास्तव में आपके टर्मिनल इनपुट ( ^[एस्केप कैरेक्टर) क्या है:

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. अपने नए "बनाए गए" संयोजन के लिए कुछ मैप करें:

    noremap <M-d> :echo "m-d works!"<cr>
    

यह समझने के लिए कि यह कैसे काम करता है, आप इस "ट्रिक" को अन्य "अजीब" संयोजनों के लिए विस्तारित कर सकते हैं, उदाहरण के लिए, मैं दीमक का उपयोग कर रहा हूं, और विम <S-F1>मुझे नहीं मिल रहा है ^[[1;2P। फिर, मेरे vimrc में मैं करता हूँ: execute "set <S-F1>=\e[1;2P"और फिर मैं इसे किसी भी चीज़ में मैप कर सकता हूँ।

नोट: मुझे नहीं पता कि क्यों, लेकिन कुछ लोगों के लिए \<Esc>इसके बजाय काम करता है \e


अपडेट (फरवरी 2016)

टर्मिनल पर निर्भर करता है कि आपका टर्मिनल चलता है, शायद आप ... अधिकांश टर्मिनलों में, "alt + h", उदाहरण के लिए, मैप किया जाता है ^[h, जो है: "एस्केप + एच"। तो यह कुंजी को अधिलेखित कर सकता है। मैंने अभी-अभी कोशिश की है (फिर से) और यह काम करने लगता है, लेकिन मेरा मानना ​​है कि यह एक बहुत ही छोटी गाड़ी है और त्रुटि के कार्यान्वयन में त्रुटि है।

फिर भी, बहादुर के लिए पर्याप्त है, यहाँ एक प्रयोगात्मक प्लगइन है:


execute "set...सामान के बजाय , आप बस सीधे उपयोग कर सकते हैं set <M-d>=^[d^[वास्तव में एक एस्केप वर्ण के साथ प्रवेश किया है C-v-Esc। यह rxvt / urxvt में आवश्यक था, लेकिन xterm को विशेष उपचार की आवश्यकता नहीं होनी चाहिए। विम विकी में इस विषय पर अधिक जानकारी ।
मीका इलियट

क्या इस के अनुरूप कोई ऐसा तरीका है जो tmux के साथ काम करेगा ताकि md को बाँधा जा सके?
जॉर्ज

2
मेरे लिए, <Esc>तो dअब वही करता है <Alt>+ d। इसके अलावा, आप सिर्फ इस के साथ एक पंक्ति में कर सकते हैं Ctrl-v, <Esc>के अनुसार यहाँ
स्पर्हाक

24

मैक ओएसएक्स पर विम में मानचित्र Alt कुंजी:

उस कुंजी कोड को देखकर शुरू करें जिसे आपका टर्मिनल विम पर भेज रहा है:

$ sed -n l
^[[1;9D 

उपरोक्त उदाहरण में, मैंने कमांड चलाया और दबाया Alt + Left

^[[1;9Dबच गए अनुक्रम vim को भेजा जा रहा उपयोगकर्ता है, इसलिए हम कर सकते हैं कि हमारे मानचित्रण के लिए।

map <Esc>[1;9D 

3
यदि आप iTerm2 ऐप का उपयोग कर रहे हैं, तो यह जांचना अच्छा है कि प्रोफाइल> कुंजी में कैसे मैप किया गया है।
fikovnik

1
बाईं ओर Optionकुंजी ( ) Esc+iTerm2 के रूप में कॉन्फ़िगर किया गया है, मैं alt+qvim छोड़ने के लिए मैप कर सकता हूं : nnoremap <silent> <Esc>q :qa!<cr>
ryenus

यदि आप प्राथमिकताएँ पर जाते हैं तो आप उस रीमैप के साथ काम करने के लिए iTerm2 को सेट कर सकते हैं यदि आप प्रोफ़ाइल पर जाते हैं, तो अपना वर्तमान प्रोफ़ाइल चुनें, उस प्रोफ़ाइल के लिए "कुंजियाँ" टैब पर जाएं और "Esc +" ("उपलब्ध" के लिए "वाम" कुंजी "कहते हुए विकल्प बदलें। विकल्प "सामान्य", "मेटा", और "Esc +") हैं।
जियोवानी बेनुसी

12

उपयोग:

map <A-D> <C-D>

देखते हैं :help key-notation


1
ऐसा लगता है कि यह अभी भी काम नहीं करता है। Alt + d एक अजीब चरित्र को Vim में इनपुट करेगा, जो अनमैप केस के साथ भी ऐसा ही है।
थॉमसन

मेरे लिए काम करता है (मैं gvimविंडोज़ पर उपयोग कर रहा हूं )
Deqing

8

आपका टर्मिनल Alt-D को "ठीक से" प्रसारित नहीं कर सकता है। आप सीवी का उपयोग वास्तव में विम के लिए वास्तविक भागने के अनुक्रम को प्राप्त करने के लिए कर सकते हैं और इसका उपयोग अपनी मैपिंग बनाने के लिए कर सकते हैं। यानी, अपना .vimrc संपादित करें और निम्न अनुक्रम "CV Alt-D" टाइप करके वास्तविक को बदलें ताकि आपके पास अपने vimrc में सही एस्केप अनुक्रम हो। यदि आपका टर्मिनल कुछ भी नहीं भेजता है तो यह काम नहीं करेगा।


8

मेरा टर्मिनल ^[xकमांड का उत्पादन करेगा (उदाहरण के लिए alt-x)। विम के अंदर काम करने के लिए क्या मिला यह vim.wikia.com की छोटी स्क्रिप्ट थी :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

सभी ऊपरी कुंजी मैपिंग को ठीक करने के लिए .vimrc में जोड़ें।


1

मैक उपयोगकर्ताओं के लिए ब्रूनो के जवाब के अनुवर्ती के रूप में, सुनिश्चित करें कि आपके विकल्प कुंजी को मैप करने का प्रयास करें Esc+

यह आपको Aविम में विकल्प ( ) कुंजी का "सामान्य" व्यवहार देगा ।

उदाहरण के लिए, iterm2इस विकल्प के तहत पाया जा सकता है Preferences > Profiles > Keys:

iterm2 प्राथमिकताएँ स्क्रीनशॉट


मुझे कॉन्फिग को भी nnoremap <Esc>j :m .+1<CR>==और इसी तरह बदलना पड़ा ...
मिहिपोपेस्कु

0

हैलो, मैक पर उपरोक्त सभी परीक्षण के वर्षों के बाद कोई अच्छा समाधान नहीं है, मैं खोज करता रहा।

यहाँ मेरा समाधान है:

Alt सहित एक संयोजन कीस्ट्रोक बनाने के लिए आपको वरीयता> कीबोर्ड में संयोजन की घोषणा करनी होगी और उस संयोजन का उपयोग विम सेटअप फ़ाइल (मेटा कुंजी के रूप में चेक उपयोग विकल्प) में करना होगा।

आउटपुट एक असामान्य चरित्र ( aउदाहरण के लिए नहीं) होना चाहिए ताकि आप एक नियमित चरित्र को ओवरराइड नहीं कर रहे हैं।

नीचे दिए गए उदाहरण में आपको ALT-Up के साथ काफी अधिक सक्षम होना चाहिए।

विम सेटिंग: विम सेटिंग

मैक सेटिंग: मैक सेटिंग

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