vim tidak mengingat posisi terakhir

89

Ubuntu LTS 12.04 saya memiliki editor vim. Jika saya membuka file, pindah ke paragraf dan buka kembali vim, maka kursor selalu menuju ke awal file.

Ini bukan perilaku yang diharapkan. Bagaimana vim dapat mengingat posisi membaca terakhir setelah menutup file?

Saya mencoba vijuga, tetapi hasilnya sama.

Jamur Bulan
sumber
1
Maaf, tapi sepertinya ada 0 dokumentasi yang mengatakan itu seharusnya. Apakah Anda 100% yakin itulah masalahnya untuk Vim? Dan, saya minta maaf, saya tidak tahu cara mengkonfigurasinya untuk mengingat posisi terakhir. Mungkin komentar yang tidak perlu oleh saya, tetapi saya harus tahu jika Anda mengalami program melakukan itu sebelumnya.
Denny
4
Misalnya dalam Redhat, baris referensi terakhir dalam file dikenang oleh vim. vim sepertinya tidak nyaman di ubuntu 12.04
Lunar Mushrooms
Juga di Ubuntu 10,04 ini tentu bukan perilaku default. Saya telah menggunakan Vim di Ubuntu sejak lama, tidak pernah melihat perilaku yang Anda harapkan. Anda mungkin telah mengonfigurasinya untuk melakukannya pada instalasi itu - lihat jawaban dari @GaryBishop misalnya.
gertvdijk
Maaf itu bukan Ubuntu 10.04, itu topi merah yang berfungsi. Diperbarui komentar saya
Jamur Lunar

Jawaban:

116

Menyelesaikannya:

/ etc / vim / vimrc

Sudah mengandung fitur yang diperlukan. Hanya perlu batalkan komentar:

" 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

(Infact, Anda dapat merujuk ke /usr/share/vim/vim73/vimrc_example.vim juga)

Jamur Bulan
sumber
Tampaknya hanya berfungsi dengan pengguna root, bukan pengguna lain. File vimrc saya adalah -rw-r--r-- 1 root root; apakah itu masalahnya?
ADTC
2
Saya mengalami masalah aneh di mana satu pengguna akan mengingat posisi terakhir, tetapi tidak ada yang lain. Ternyata baris-baris ini berada di file .vimrc pengguna, tetapi dikomentari di / etc / vim / vimrc. Membatalkan komentar mereka di sana memungkinkannya untuk semua pengguna.
felwithe
66

Saya memiliki masalah yang sama dan ternyata file .viminfo di direktori home saya memiliki kepemilikan yang salah. Dimiliki oleh root: root.

Setelah saya memperbaiki kepemilikan file dengan mengubahnya ke diri saya sendiri, mengingat posisi file mulai bekerja untuk saya lagi

TikiTavi
sumber
3
Ini berhasil dalam kasus saya. Saya mengalami masalah yang sama. Saya telah mengubah kepemilikan .viminfo (ada di direktori home) yang memperbaiki masalah vim. Tapi mengapa itu dibuat dengan root: root?
Brijesh Valera
1
@ BrijeshValera mungkin karena Anda mulai vim sebagai root ketika file belum ada.
Ruslan
1
@Ruslan Tapi bukankah file itu harus dibuat di direktori home pengguna root?
ankush981
5
@ Dotslash yang rumit dengan sudo. Itu tidak mengubah lingkungan (setidaknya sebagian besar): coba jalankan sudo bash -c 'echo $HOME', Anda akan mendapatkan direktori home Anda alih-alih dari root.
Ruslan
1
Itulah penyebabnya pada 18,04 saya
Hanynowsky
2

Ada sebuah plugin bernama vim-lastplace (saya adalah pembuatnya) yang akan membuka file Anda di mana Anda tinggalkan. Ini meningkatkan saran di atas dengan mengabaikan pesan komit karena Anda biasanya mengedit pesan baru dan ingin memulai di bagian atas file pesan komit.

Greg Dietsche
sumber
mengapa downvote? vim-lastplace melakukan persis apa yang diminta OP, dan melakukannya bahkan lebih baik daripada jawaban yang diterima (yang memiliki sejumlah bug di dalamnya).
Greg Dietsche
0

Dalam kasus saya, vi adalah sebuah symlink: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Yang terakhir tidak memiliki fitur vim nyata. Menginstal paket 'vim' (menggunakan sinaptik atau apt-get) membuat symlink ini mengarah ke /usr/bin/vim.basic, dan ini memperbaiki masalah.

Bruno Haible
sumber
-1

Ada kesalahan dalam solusi Jamur Lunar. Di sini koreksi:

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
Arnaud
sumber
Mengapa Anda yakin solusi Anda benar? Ini terlihat sangat mirip, tetapi untuk garis miring terbalik di awal garis. Jika ada, bukankah seharusnya mereka berada di akhir baris yang menunjukkan perintah terus di baris berikutnya ...? Juga, jawaban yang diterima hanya berbicara tentang menghapus komentar bagian dalam file konfigurasi global, yang diinstal bersama vim. Rupanya ini menyelesaikan masalah. Di mana letak kesalahannya?
Nephente
Karena jika saya salin / tempel solusi pertama, saya mendapat kesalahan. Dan saya memposting konten /usr/share/vim/vim74/vimrc_example.vim saya (yang termasuk backslash di awal).
Arnaud
1
@Audkan area garis sudah disediakan dalam file, tetapi berkomentar. Anda hanya perlu menghapus "karakter di awal baris untuk menghapus komentarnya. Tidak perlu "menyalin / menempel solusi pertama".
ADTC