नवविराम टर्मिनल फलक में प्रवेश करते समय इंसर्ट मोड कैसे दर्ज करें?


16

मेरे पास निम्न मैपिंग है जिससे नवो में टर्मिनल फलक से बाहर जाना आसान हो जाता है:

tnoremap <C-h> <C-\><C-n><C-w>h
" Workaround since <C-h> isn't working in neovim right now
tnoremap <C-w>h <C-\><C-n><C-w>h
tnoremap <C-j> <C-\><C-n><C-w>j
tnoremap <C-k> <C-\><C-n><C-w>k
tnoremap <C-l> <C-\><C-n><C-w>l

एकमात्र समस्या यह है कि जब मैं टर्मिनल पेन में वापस जाता हूं, तो मुझे iइन्सर्ट मोड में वापस जाने के लिए प्रेस करना होगा। मैं हमेशा यह सम्मिलित मोड में रहना चाहता हूं, जब मैं एक नेओविम फलक में जाता हूं जो टर्मिनल चल रहा है। इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?

जवाबों:


18

एक टर्मिनल बफर नाम हमेशा के साथ शुरू होता है term://:

autocmd BufWinEnter,WinEnter term://* startinsert

ध्यान दें कि यह आपको हमेशा टर्मिनल विंडो में ले जाने के दौरान आपको इन्सर्ट मोड में रखेगा, विंडो को छोड़ते समय आप जिस मोड का उपयोग कर रहे थे, उसकी परवाह किए बिना।


आप टर्मिनल विंडो से बाहर निकलते समय भी सामान्य मोड में वापस आने के लिए एक समान ऑटोकॉमैंड का उपयोग कर सकते हैं, चाहे आप इस फाइल को कैसे भी छोड़ दें।

autocmd BufLeave term://* stopinsert


इस समाधान के साथ, मैं इस समस्या का अनुभव करता हूं । क्या आप इसके आस-पास का रास्ता जान पाएंगे?
रास्टापोपोलोस

BufEnterऐसा लगता है जैसे autocmd दिखता है इस समस्या नहीं है।
रास्तोपोपोलोस

3

टर्मिनल पर टर्मिनल बफर सेट में प्रवेश करना buftype, आप वास्तव में इसके बजाय इसका उपयोग कर सकते हैं:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif

मैंने पाया कि: इस पोस्ट के अनुसार देशी vim 8 टर्मिनलों के लिए काम नहीं करता है। यह वास्तव में स्पष्ट रूप से कहा गया है :help terminalकि, ": प्रारंभ करनेवाला अप्रभावी है।" मैंने पाया कि exec 'normal! i'इसके बजाय काम करता है।
केविन

1
"मैंने पाया है कि: इस पद के रूप में देशी 8 विम के लिए शुरुआती काम नहीं करता है।" यह दुख की बात है। विम को नियोविम से बहुत कुछ सीखना है।
त्रुष्टक

0

या इससे भी थोड़ा बेहतर:

  function! TerminalOptions()
    " /* folded code */
    silent au BufEnter <buffer> startinsert!
    silent au BufLeave <buffer> stopinsert!
  endfunction
  au TerminalOpen * call TerminalOptions()

जो <buffer>स्थानीय स्तर पर लागू करने के लिए au कमांड बनाएगा, इसलिए केवल टर्मिअल बफर प्रकार के लिए। यह केवल टर्मिनल के लिए इतनी सेटिंग बदलने के लिए भी उपयोगी है। जैसे कि रिश्तेदार लाइनों से पूर्ण तक swtich;)

इसके अलावा ..... मैं :startinsertकाम नहीं कर सकता , भले ही सभी डॉक्स उस ओर इशारा करते हों। मुझे निम्नलिखित कार्य करने थे:

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