vim अंतिम स्थिति को याद नहीं कर रहा है


89

मेरे Ubuntu LTS 12.04 में विम एडिटर है। यदि मैं एक फ़ाइल खोलता हूं, तो एक पैराग्राफ पर जाएं और फिर से खोलें, फिर कर्सर हमेशा फ़ाइल की शुरुआत में जाता है।

यह अपेक्षित व्यवहार नहीं है। किसी फ़ाइल को बंद करने के बाद विम अंतिम रीड पोजीशन को कैसे याद रख सकता है?

मैंने viभी कोशिश की , लेकिन नतीजा वही है।


1
मुझे खेद है, लेकिन ऐसा लगता है कि यह होना चाहिए। क्या आप 100% यकीन है कि विम के लिए मामला है? और, मुझे खेद है, मुझे नहीं पता कि अंतिम स्थिति को याद रखने के लिए इसे कैसे कॉन्फ़िगर करना है। मेरे द्वारा एक अनावश्यक टिप्पणी हो सकती है, लेकिन मुझे पता होगा कि क्या आपने उस कार्यक्रम को करने से पहले अनुभव किया था।
डेनी

4
उदाहरण के लिए, Redhat में, फ़ाइल में अंतिम रेफरी की गई पंक्ति को विम द्वारा याद किया जाता है। vim ubuntu 12.04
लूनर मशरूम

इसके अलावा Ubuntu 10.04 में यह निश्चित रूप से डिफ़ॉल्ट व्यवहार नहीं है। मैं लंबे समय से उबंटू पर विम का उपयोग कर रहा हूं, अपने अपेक्षित व्यवहार को कभी नहीं देखा। आपने शायद इसे उस इंस्टॉलेशन पर करने के लिए कॉन्फ़िगर किया है - उदाहरण के लिए @GaryBishop का उत्तर देखें।
gertvdijk

क्षमा करें यह उबंटू 10.04 नहीं था, यह लाल टोपी थी जो काम करती थी। मेरी टिप्पणी
चंद्र मशरूम

जवाबों:


116

इसे हल किया:

/ Etc / vim / vimrc

पहले से ही आवश्यक सुविधा शामिल है। बस इसे अनसुना करने की आवश्यकता है:

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

(वास्तव में, आप /usr/share/vim/vim73/vimrc_example.omim भी देख सकते हैं)


यह केवल रूट उपयोगकर्ता के साथ काम करता है, अन्य उपयोगकर्ताओं के साथ नहीं। मेरी vimrc फ़ाइल है -rw-r--r-- 1 root root; क्या यह समस्या होगी?
ADTC

2
मुझे अजीब समस्या हो रही थी जहां एक उपयोगकर्ता अंतिम स्थिति याद रखेगा, लेकिन कोई अन्य नहीं। पता चलता है कि ये लाइनें उपयोगकर्ता .vimrc फ़ाइल में थीं, लेकिन / etc / vim / vimrc में टिप्पणी की गई थीं। उन्हें वहां से हटाकर सभी उपयोगकर्ताओं के लिए सक्षम किया गया।
felwithe

66

मुझे भी यही समस्या थी और यह पता चला कि मेरे होम डायरेक्टरी में .viminfo फाइल का गलत स्वामित्व था। इसका मूल: जड़ से था।

एक बार जब मैंने फ़ाइल का स्वामित्व अपने आप में बदलकर तय किया, तो याद रखना कि फ़ाइल की स्थिति फिर से मेरे लिए काम करने लगी


3
यह चीजें मेरे मामले में काम करती हैं। मैं एक ही मुद्दा रहा था। मैंने .viminfo (घर निर्देशिका में मौजूद) के स्वामित्व को बदल दिया है जो विम मुद्दों को ठीक करता है। लेकिन इसे जड़ से क्यों बनाया गया: जड़?
ब्रिजेश वलेरा

1
@BrijeshValera संभावना है क्योंकि आपने फ़ाइल के रूप में मौजूद नहीं होने पर रूट के रूप में विम शुरू किया था।
रुस्लान

1
@Ruslan लेकिन फिर क्या रूट उपयोगकर्ता के होम डायरेक्टरी में फाइल नहीं बनाई जानी चाहिए?
ankush981

5
@dotslash के साथ मुश्किल है sudo। यह पर्यावरण को नहीं बदलता है (कम से कम ज्यादातर): चलाने की कोशिश करें sudo bash -c 'echo $HOME', आपको रूट के एक के बजाय अपने घर की निर्देशिका मिलेगी।
रुस्लान

1
यही कारण था कि मेरे 18.04 में
Hanynowsky


2

Vim-lastplace (मैं लेखक हूँ) नामक एक प्लगइन है जो आपकी फ़ाइलों को खोलेगा जहाँ आपने छोड़ा था। यह उपर्युक्त सुझावों पर प्रतिबद्ध संदेशों की अनदेखी करके सुधार करता है क्योंकि आप आम तौर पर एक नया संदेश संपादित कर रहे हैं और प्रतिबद्ध संदेश फ़ाइल के शीर्ष पर शुरू करना चाहते हैं।


डाउनवोट क्यों? vim-lastplace ठीक वही करता है जो ओपी ने पूछा था, और क्या यह स्वीकार किए गए उत्तर (जो इसमें कई बग हैं) से भी बेहतर है।
ग्रेग डाइटेचेस

0

मेरे मामले में, vi एक सहानुभूति थी /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny:। उत्तरार्द्ध में कोई वास्तविक विशेषता नहीं है। पैकेज 'vim' (synaptic या apt-get का उपयोग करके) स्थापित करने से यह सिमलिंक पॉइंट हो गया /usr/bin/vim.basicऔर इसने समस्या को ठीक कर दिया।


-1

लूनर मशरूम समाधान में एक गलती है। यहाँ सुधार है:

if has("autocmd")
  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

endif

आप अपने समाधान को सही क्यों मानते हैं? यह एक जैसा दिखता है, लेकिन एक पंक्ति की शुरुआत में बैकस्लैश के लिए । यदि कोई हो, तो क्या उन्हें अगली पंक्ति पर कमांड को दर्शाने वाली रेखा के अंत में नहीं होना चाहिए ...? इसके अलावा, स्वीकृत उत्तर सिर्फ एक ग्लोबल कॉन्फिगर फाइल में एक सेक्शन को अनइंस्टॉल करने की बात करता है, जिसे एक साथ स्थापित किया गया है vim। जाहिर तौर पर इससे समस्या हल हो गई। त्रुटि कहां है?
नेफेंटे सिप

क्योंकि यदि मैं पहले समाधान को कॉपी / पेस्ट करता हूं, तो मुझे एक त्रुटि मिली है। और मैंने अपनी /usr/share/vim/vim74/vimrc_example.vim की सामग्री पोस्ट की (जिसमें शुरुआत में बैकस्लैश शामिल थे)।
अरनौद

1
@Amaud फ़ाइल में पहले से उपलब्ध कराई गई लाइनों का क्षेत्र, लेकिन टिप्पणी की। आपको बस "उन्हें अनलिम करने के लिए लाइनों की शुरुआत में चरित्र को हटाना होगा। "पहले समाधान को कॉपी / पेस्ट" करने की कोई आवश्यकता नहीं है।
ADTC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.