मैं कर्सर को वर्तमान रेखा के केंद्र में कैसे ले जाऊं?


17

क्या कोई तरीका है जिससे मैं अपने कर्सर को वर्तमान लाइन के मध्य में स्थानांतरित कर सकता हूं? (पाठ की पंक्ति के बीच में - स्क्रीन की चौड़ाई के बीच में नहीं)

मैं सोच रहा था कि क्या Mस्क्रीन के मध्य में चाल चाल कर्सर के समान एक शॉर्टकट था ।

संपादित करें : कोष्ठक के अंदर स्पष्टीकरण जोड़ा गया


2
तो पूर्ण रेखा के मध्य या स्क्रीन की चौड़ाई के मध्य है?
मुरु

@ मुरु पूरी लाइन के बीच में सोच रहे थे
थमेरा

2
क्या आप इसे प्रश्न में भी जोड़ सकते हैं? और क्या आप रैपिंग के साथ होने की उम्मीद करते हैं?
मुरु

जवाबों:


16

मैं ऐसा करने के लिए किसी भी तरह से जान लेता हूं, हालांकि, आपके पास इसे करने के लिए आसानी से एक नक्शा हो सकता है:

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@ इंगो करकट ने निम्नलिखित संस्करण का प्रस्ताव रखा जो विज़ुएल-मोड में भी काम करता है।

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

दुर्भाग्य से, यह सिलेक्ट-मोड में भी चालू हो गया है। एक परिणाम के रूप में, मैं इस जोड़े को पसंद करता हूं:

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'

3
यह संस्करण दृश्य विधा के लिए भी सही ढंग से काम करेगा:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
इंगो करकट

15

बिल्ट-इन gmबिल्कुल यही करता है।


7
ध्यान दें कि यह आपको कंसोल की चौड़ाई के संबंध में लाइन के मध्य तक ले जाता है, लाइन की लंबाई के संबंध में नहीं । इसलिए, यदि आपके पास 10 वर्णों की एक पंक्ति है और एक कंसोल जो कि 80 वर्णों वाला है, तो कर्सर पंक्ति में 10 वें वर्ण पर समाप्त हो जाएगा (क्योंकि यह 40 वें स्थान पर पहुंचने की "कोशिश कर रहा है"), 5 वीं नहीं।
एपर्टोर्टन

3
हां। सवाल से, यह स्पष्ट नहीं है कि हम रेखा के मध्य या स्क्रीन के मध्य की तलाश कर रहे हैं या नहीं। के अनुरूप के आधार पर M, मैंने स्क्रीन ग्रहण की।
टोमकोडो

1
वास्तव में मैंने 80-टेक्स्ट के साथ एक विस्तृत (लगभग 180 वर्णों) स्क्रीन पर यह कोशिश की। कर्सर लाइन के अंत में चला गया । एक बहुत ही उपयोगी आदेश नहीं लगता है।
बेन

@ क्या यह पंक्ति के अंत में गया था, या क्या यह स्क्रीन की चौड़ाई के केंद्र के करीब चला गया जितना इसे मिल सकता है? इसे एक लाइन के साथ आज़माएं जो स्क्रीन की तरह 50% से अधिक चौड़ी हो, या इसके साथ प्रयास करें :set virtualedit=all
8bittree

हां, लेकिन ओपी स्क्रीन के बीच में नहीं बल्कि लाइन टेक्स्ट के बीच में जाने के लिए कमांड मांग रहा था। तो यह सवाल का जवाब नहीं है।
बेन

3

ल्यूक के जवाब में जोड़ने के लिए, इजीमोशन प्लगइन भी है , जो एक विशिष्ट स्थिति को हवा में जल्दी से आगे बढ़ाता है । दबाने <Leader><Leader>wसे आप एक विशेष शब्द पर जाने के लिए किस कुंजी को दबा सकते हैं। इस तरह आप आसानी से करंट लाइन के बीच में एक शब्द ले जा सकते हैं।


1

यदि आप पाठ के मध्य में जाना चाहते हैं (लाइन की शुरुआत में व्हाट्सएप को ध्यान में नहीं रखते हैं), तो यह काम करेगा:

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

मुझे नहीं लगता कि यह दृश्य मोड में काम करेगा, हालांकि।


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