विम में कर्सर को स्थानांतरित किए बिना स्क्रीन को कैसे स्थानांतरित किया जाए?


598

मैंने हाल ही में विम के लिए Ctrl+ Eऔर Ctrl+ Yशॉर्टकट खोजे हैं जो क्रमशः कर्सर को हिलाए बिना स्क्रीन को एक पंक्ति के साथ ऊपर और नीचे ले जाते हैं

क्या आप किसी भी कमांड को जानते हैं जो कर्सर को छोड़ता है, लेकिन यह स्क्रीन को स्थानांतरित करता है ताकि जिस लाइन पर कर्सर हो वह पहली लाइन बन जाए? (अंतिम पंक्ति के लिए एक कमांड रखना एक अच्छा बोनस होगा)।

मैं इसे उचित संख्या में Ctrl+ E(या Ctrl+ Y) मैन्युअल रूप से दबाकर प्राप्त कर सकता हूं , लेकिन एक आदेश है कि किसी भी तरह यह सीधे होता है अच्छा होगा।

कोई विचार?


क्या यह प्रश्न विम अनुभाग में नहीं होना चाहिए?
जॉन

जवाबों:


877
  • zz- वर्तमान लाइन को स्क्रीन के मध्य में ले जाएं
    ( सावधानी सेzz , अगर आपके साथCaps Lock गलती से ऐसा होता है, तो आप सहेज लेंगे और बाहर निकल जाएंगे vim!)
  • zt - स्क्रीन के शीर्ष पर वर्तमान लाइन ले जाएँ
  • zb - स्क्रीन के नीचे करने के लिए वर्तमान लाइन ले जाएँ

9
@ HappyGreenKidNaps ASAP को नियंत्रित करने के लिए कुंजी को लॉक करने वाला मानचित्र!
हारून

मैं अपने कैप्स लॉक से बहुत जुड़ा हुआ हूं, विशेष रूप से बहुत सी मैक्रोज़ के साथ काम कर रहा हूं, लेकिन आपके पास अन्य विकल्प हैं। सबसे पहले, एक अनमैप्ड कुंजी ढूंढें (अक्षरों के लिए दोनों मामलों की जाँच करें; एक संशोधक या नेता को जोड़ने का प्रयास करें, एक प्रतीक या फ़ंक्शन कुंजी, आदि का उपयोग करके) और इसे मामले के संवेदनशील 'जोखिम भरे' संयोजन में मैप करें। दूसरा, अपनी पसंद के हिसाब से विमुंडो कॉन्फ़िगर करें ताकि आप ऊप्स से उबर सकें। (नॉन-पोर्टेबल हैक्स इनकमिंग :) थर्ड, वही करें लेकिन अपने यूजर कीबोर्ड कॉन्फिग से, जैसे विंडोज की + जेड; दृश्यों के दृश्यों के लिए, प्रयास करें xdotoolया triggerhappy। अंत में, अपने कैप्स लॉक स्टेट को प्रदर्शित करें (Vimscript में नहीं किया जा सकता है।) ...
John P

2
आपके कैप लॉक स्टेट को छोड़ना बहुत पर्यावरण-निर्भर है। मैंने सुना है कि यह Vimscript में नहीं किया जा सकता है, और इस बिंदु पर मैंने इसे स्वीकार कर लिया है। यदि आप उस सड़क पर जाना चाहते हैं xev -q, cat /proc/bus/input/devicesतो डिवाइस को क्वेरी करने और evtestया thd ... --dump /dev/input/event<#>राज्य की जांच करने के लिए, आदि। यदि आप बिल्कुल एक सिस्टम-वाइड रीमैपिंग करना चाहते हैं, तो कम से कम दो ताले जैसे कैप <-> अंक - स्वैप करें लेकिन यह मुद्दा अधिक विस्मृत हो रहा है कि यह चालू है, क्योंकि यदि आप इसे पहले चाहते थे, तो आप इसका उपयोग करते रहेंगे, जो भी नक्शा हो। फ़ाइलों / उपयोगकर्ता / प्रणाली से पहले विम को तोड़ना जोखिम।
जॉन पी

अन्य विम स्क्रिप्ट विकल्प: छोड़ / छोड़ने / आदि की पुष्टि करने के लिए 'पुष्टि' चालू करें; लिखने के लिए, मुझे विश्वास है कि आपको BufWritePre के लिए एक ऑटोकॉमैंड की आवश्यकता होगी confirm()। इसके अलावा, कैप्स लॉक को ctrl पर मैप करने के बजाय, आप इसे समझी गई कुंजी या संयोजन पर मैप कर सकते हैं, लेकिन विम द्वारा अनमैप्ड, और फिर कैप्स लॉक को विशेष रूप से इंसर्ट करते समय इंसर्ट / रिप्लेस मोड में, हाथ से या github.com/tubope/ जैसी किसी चीज से कर सकते हैं । विम-capslock । आपको शायद विम के बाहर इसकी आवश्यकता नहीं होगी, लेकिन यदि आप करते हैं, तो अपने परिवर्तनों को वापस लाने के लिए एक xmodmap स्क्रिप्ट लिखें, या देखें कि क्या प्रोग्राम अपने स्वयं के मैपिंग का समर्थन करता है (और नोट्स बनाते हैं।)
जॉन पी

3
zt / zz / zb - निश्चित कर्सर और चाल स्क्रीन को t op / केंद्र (जर्मन: ' z entrum') / b ottom <---> H / M / L - निश्चित स्क्रीन और कर्सर को H igh / M के लिए ले जाएँ / एल उल्लू की स्थिति
eli

626

इसके अतिरिक्त:

  • Ctrl- yस्क्रीन को एक पंक्ति ऊपर ले जाता है
  • Ctrl- eस्क्रीन को एक पंक्ति नीचे ले जाता है
  • Ctrl- uकर्सर ले जाता है और। पेज को स्क्रीन करता है
  • Ctrl- dकर्सर और स्क्रीन नीचे। पेज चलता है
  • Ctrl- bस्क्रीन को एक पृष्ठ, कर्सर को अंतिम पंक्ति में ले जाता है
  • Ctrl- fस्क्रीन को एक पृष्ठ पर ले जाता है, कर्सर को पहली पंक्ति में

Ctrl- yऔर Ctrl- eकेवल कर्सर स्थिति बदल जाने पर इसे स्क्रीन से हटा दिया जाएगा।

Http://www.lagmonster.org/docs/vi2.html के सौजन्य से


91
@ulidtko: बाद में (स्वीडिश में), योर (अतीत का अर्थ), ऊपर, नीचे, पीछे, आगे। (आगे और पीछे के शब्द ऊपर और नीचे से अधिक लंबे होते हैं, इसलिए स्वाभाविक रूप से वे स्क्रीन को अधिक दूरी तक ले जाते हैं;)
मोरबर्ग

12
मुझे लगता है कि यस्टर, कल के रूप में एक बेहतर mnemonic होगा, ^ ^
Moberg

दोनों Ctrl-यू और Ctrl-D कर्सर ले जाने के: " । कर्सर अप फ़ाइल की पंक्तियों की संख्या समान ले जाया जाता है (यदि संभव हो, जब रेखाओं को रैप और जब फ़ाइल के अंत से टकराने वहाँ एक अंतर हो सकता है) "
लेक्स आर

धन्यवाद @LexR, मैंने उस अंतर को दर्शाने के लिए उत्तर को अपडेट किया है।
पॉल व्हीलर

1
:help CTRL-Eकहता हैMnemonic: Extra lines.
निको बेलिक

39

विम को हर समय वर्तमान स्क्रीन में कर्सर की आवश्यकता होती है, हालांकि, आप वर्तमान स्थिति को चारों ओर स्क्रॉल कर सकते हैं और फिर जहां थे वहीं वापस कर सकते हैं।

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g

1
ध्यान दें कि यदि आप केवल बुकमार्क की गई लाइन पर जाने की परवाह करते हैं, तो आप 'g
मैट ब्रिग्स

4
"विम को हर समय वर्तमान स्क्रीन में कर्सर की आवश्यकता होती है" विम उपयोगकर्ता यह दावा करना पसंद करते हैं कि सब कुछ विम में कॉन्फ़िगर करने योग्य है। यह एक नहीं है। मैं फ़ाइल के माध्यम से स्क्रॉल करते समय अपना कर्सर नहीं ले जाना चाहता। मेरे लिए
डीलब्रेकर

8
मेरे पास कभी ऐसी स्थिति नहीं थी जहां मैं चाहता था कि कर्सर कहीं न कहीं आप इसे देख नहीं सकते थे। निश्चित रूप से, जब आप स्क्रॉल करते हैं तो कर्सर इधर-उधर हो जाता है लेकिन आप उस स्थान पर वापस जा सकते हैं जहाँ आप तुच्छ थे (ताकि आप देख सकें कि आप वास्तव में कहाँ थे, न कि केवल अनुमान के अनुसार)। एक के लिए डबल बैक-टिक, एक Ctrl-Oऔर वास्तव में महान के लिए, और "बैकटिक, पीरियड" आपको उस स्थान पर वापस रखता है जहां आप अंतिम संपादन कर रहे थे।
डैश-टॉम-बैंग

3
@gedalat, जब आप स्क्रॉल करते हैं, तो यह अन्य संपादकों के लिए बहुत कष्टप्रद होता है, पता नहीं चलता है कि आपका कर्सर अब कहां है और माउस का उपयोग कहीं पर क्लिक करने के लिए है ताकि आप कर्सर को वापस पा सकें। या आपको लगता है कि आप "यहां" हैं, टाइप करना शुरू करें और यह अचानक वापस वहीं कूदता है जहां कर्सर था, जिस बिंदु पर आप वापस स्क्रॉल नहीं कर सकते हैं जहां आपने स्क्रॉल किया था, क्योंकि केवल कर्सर स्थिति ट्रैक की जाती है। कर्सर का अनुसरण करना जहाँ आप जाते हैं यकीनन एक अच्छी बात है।
शहबाज

1
यह विन्यास योग्य है, @ गुड़गांव। आपको बस इस बहुत ही उत्तर को मैप करना होगा (मार्क पोजीशन जिसके साथ है mg, चारों ओर स्क्रॉल करें, गोटो मार्क के साथ 'gऔर आप कर चुके हैं। अब आप चारों ओर जाने के लिए कॉन्फ़िगर करने योग्य कुंजी को आमंत्रित कर सकते हैं और ऐसा महसूस होगा कि कर्सर ने वर्तमान स्थिति को कभी भी लीक नहीं किया है। Voilá!
डॉ। बीईओ

18

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

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

ताकि कर्सर स्क्रीन के बीच में रहे, और स्क्रीन ऊपर या नीचे जाएगी।


मैं बात करता हूं कि यह समाधान ओपी के लिए अधिक आवश्यक है। मैंने इसे लागू किया और यह एक आकर्षण की तरह काम करता है।
गुस्तावो पिंसर्ड २०

9
'स्क्रॉलऑफ़' को 'लाइन्स' के आधे मान पर सेट करने के बारे में क्या?
पुराना।

दुर्भाग्य से "nnoremap o o <ESC> zza" ऑटोइंडेंट खो देता है, लेकिन यह एक अस्थायी चरित्र को जोड़ने और हटाने के द्वारा इसके आसपास काम करता है '।' "nnoremap o o। <ESC> zzxa"
नील मैकगिल

@ धन्यवाद, 'स्क्रॉलऑफ़' भी एक अच्छा या शायद बेहतर समाधान है। धन्यवाद! यहाँ संदर्भ है: vim.wikia.com/wiki/…
हेनरी

14

एक ही स्तंभ में कर्सर छोड़ने के लिए जब आप का उपयोग Ctrl+ D, Ctrl+ F, Ctrl+ B, Ctrl+ U, G, H, M, L,gg

आपको निम्नलिखित विकल्प को परिभाषित करना चाहिए:

:set nostartofline

2
मैं इसे हर बार भूल / भ्रमित करता हूं: zt / zz / zb - फिक्स्ड कर्सर और मूव स्क्रीन को t op / center (जर्मन: ' z entrum') / b ottom <---> H / M / L - फिक्स्ड स्क्रीन और मूव कर्सर को H igh / M आइडल / एल ओव पोजीशन
eli

8

मुझे आश्चर्य है कि कोई भी Scrolloffविकल्प का उपयोग नहीं कर रहा है जो पृष्ठ के मध्य में कर्सर रखता है। इसके साथ कोशिश करें:

:set so=999

यह विम विकी पर पहली अनुशंसित विधि है और अच्छी तरह से काम करती है।


3
और यदि आप नहीं चाहते हैं कि कर्सर हमेशा बीच में सही रहे, तो आप इसे छोटे मूल्य पर सेट कर सकते हैं। उदाहरण के लिए, :set scrolloff=4कर्सर को हमेशा खिड़की के ऊपर या नीचे से कम से कम 4 लाइनों की आवश्यकता होगी, इसलिए आपके पास हमेशा कम से कम थोड़ा संदर्भ होता है।
सोरेन ब्योर्नस्टैड

6

मैंने अतीत में इन शॉर्टकट्स का उपयोग किया है ( ध्यान दें: अलग-अलग कुंजी स्ट्रोक यानी टैप जेड , लेट गो, बाद की कुंजी टैप करें):

z enter -> वर्तमान लाइन को स्क्रीन के ऊपर ले जाता है

z . -> स्क्रीन के केंद्र में वर्तमान लाइन चलती है

z - -> वर्तमान लाइन को नीचे की ओर ले जाता है

यदि यह स्पष्ट नहीं है:

enterका अर्थ है Returnया Enterकुंजी।

.डॉट या "पूर्ण विराम" कुंजी का मतलब है ( .)।

-HYPHEN कुंजी का अर्थ है ( -)

यदि यह लायक है, तो कैप-लॉक चालू होने पर z.गलती से टाइप करके वी को बचाने और बंद करने के खतरे से बचा जाता ZZहै।


5

आप अपने कर्सर को कमांड को एक संख्या के साथ उपसर्ग कर सकते हैं और वह उस आदेश को कई बार दोहराएगा

10Ctrl+ Eकरेंगे Ctrl+ E10 बार एक के बजाय।


4

zEnter वास्तव में यह सवाल क्या पूछता है।

यह काम करता है जहां अजीब तरह से zzकाम नहीं करेगा (उबंटू 2016.04 एलटीएस पर 7.4.1689 बिना किसी विशेष .vimrc के)।



2

कभी-कभी पाठ को कुंजी Kऔर Jकुंजी के साथ स्क्रॉल करना उपयोगी होता है , इसलिए मेरे पास मेरे .vimrc (यह भी बाध्य है zs) में "स्क्रॉल मोड" फ़ंक्शन है ।

स्क्रॉल_मोड.वीम देखें ।


2

स्क्रॉल करने के लिए मेरा मेमनोनिक ...

अन्य उत्तर भी करने के लिए भुगतान करते हैं ध्यान में जोड़ रहा है zeऔर zs(कर्सर ले जाए बिना) कर्सर का सही बाईं ओर कदम स्क्रीन /:, जिसका अर्थ है

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+

भी की स्थिति को देखने hऔर lऔर tऔर bऔर (QWERTZ कीबोर्ड के साथ) c-eऔर c-yयाद करने के लिए जहां स्क्रीन बढ़ रहा है कीबोर्ड पर (भी "वाई" किसी भी तरह नीचे करने के लिए अंक)।


1

मैंने एक प्लगइन लिखा है जो मुझे कर्सर स्थिति को स्थानांतरित किए बिना फ़ाइल को नेविगेट करने में सक्षम बनाता है। यह आपकी स्थिति और आपके लक्ष्य की स्थिति के बीच की रेखाओं को मोड़ने और फिर गुना पर कूदने पर आधारित है, या इसे निरस्त करें और बिल्कुल भी न चलें।

पहली पंक्ति पर कर्सर, अंतिम पंक्ति और बीच में कर्सर को केवल क्लिक करके या जब आप प्लगइन के मोड में होते हैं j, तब तेजी से स्विच करना आसान होता है ।kl

मुझे लगता है कि यह यहां अच्छा होगा।


1

विम दर्ज करें और टाइप करें:

:help z

zRedraw के लिए vim कमांड है, इसलिए यह फ़ाइल को उस स्थान के सापेक्ष redraw करेगा जहाँ आप कर्सर को रखते हैं। आपके पास विकल्प इस प्रकार हैं:

z+- विंडो के ऊपर और अपनी लाइन के पहले गैर-रिक्त वर्ण पर कर्सर के साथ फ़ाइल को फिर से खोलता है ।

z-- खिड़की के नीचे और अपनी लाइन के पहले गैर-रिक्त चरित्र में कर्सर के साथ फ़ाइल को फिर से रीड करता है ।

z.- विंडो के केंद्र में और आपकी लाइन के पहले गैर-रिक्त वर्ण पर कर्सर के साथ फ़ाइल को फिर से बनाता है ।

zt- विंडो के शीर्ष पर कर्सर के साथ Redraws फ़ाइल ।

zb- विंडो के निचले भाग में कर्सर के साथ रेडवार्स फ़ाइल ।

zz- विंडो के केंद्र में कर्सर के साथ Redraws फ़ाइल ।

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