vim không nhớ vị trí cuối cùng


89

Ubuntu LTS 12.04 của tôi có trình soạn thảo vim. Nếu tôi mở một tệp, di chuyển đến một đoạn và mở lại vim, sau đó con trỏ sẽ đi đến đầu tệp luôn.

Đây không phải là hành vi dự kiến. Làm thế nào vim có thể nhớ vị trí đọc cuối cùng sau khi đóng một tập tin?

Tôi vicũng đã thử , nhưng kết quả là như nhau.


1
Tôi xin lỗi, nhưng dường như có 0 tài liệu nói rằng nó nên. Bạn có chắc chắn 100% đó là trường hợp của Vim? Và, tôi xin lỗi, tôi không biết làm thế nào để cấu hình nó để nhớ vị trí cuối cùng. Có thể một nhận xét không cần thiết của tôi, nhưng tôi phải biết nếu bạn có kinh nghiệm chương trình làm điều đó sớm hơn.
Denny

4
Ví dụ trong Redhat, dòng được giới thiệu cuối cùng trong một tệp được ghi nhớ bởi vim. vim dường như bất tiện trong Ubuntu 12.04
Nấm âm lịch

Ngoài ra trong Ubuntu 10.04, đây chắc chắn không phải là hành vi mặc định. Tôi đã sử dụng Vim trên Ubuntu trong một thời gian dài, chưa bao giờ thấy hành vi mong đợi của bạn. Bạn có thể đã cấu hình nó để thực hiện cài đặt đó - xem câu trả lời của @GaryBishop chẳng hạn.
gertvdijk

Xin lỗi, đó không phải là Ubuntu 10.04, đó là chiếc mũ đỏ đã hoạt động. Cập nhật nhận xét của tôi
Nấm âm lịch

Câu trả lời:


116

Đã giải quyết nó:

/ etc / vim / vimrc

Đã chứa tính năng cần thiết. Chỉ cần bỏ ghi chú:

" 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

(Nguyên vẹn, bạn có thể tham khảo /usr/share/vim/vim73/vimrc_example.vim)


Nó chỉ có vẻ hoạt động với người dùng root, không phải người dùng khác. Tập tin vimrc của tôi là -rw-r--r-- 1 root root; đó sẽ là vấn đề?
ADTC

2
Tôi đã gặp vấn đề kỳ lạ khi một người dùng sẽ nhớ vị trí cuối cùng, nhưng không có người khác. Hóa ra những dòng này nằm trong tệp .vimrc của người dùng, nhưng đã được nhận xét trong / etc / vim / vimrc. Uncommenting họ ở đó đã kích hoạt nó cho tất cả người dùng.
felwithe

66

Tôi gặp vấn đề tương tự và hóa ra tệp .viminfo trong thư mục nhà của tôi có quyền sở hữu sai. Nó được sở hữu bởi root: root.

Khi tôi đã sửa quyền sở hữu tệp bằng cách thay đổi nó thành chính mình, việc nhớ vị trí tệp bắt đầu hoạt động trở lại với tôi


3
Những điều này đã làm việc trong trường hợp của tôi. Tôi đã có vấn đề tương tự. Tôi đã thay đổi quyền sở hữu .viminfo (có trong thư mục chính) để khắc phục các sự cố vim. Nhưng tại sao nó được tạo ra với root: root?
Brijesh Valera

1
@BrijeshValera có thể vì bạn đã bắt đầu vim với quyền root khi tệp chưa tồn tại.
Ruslan

1
@Ruslan Nhưng sau đó không phải tập tin đã được tạo trong thư mục gốc của người dùng?
ankush981

5
@dotslash đó là khó khăn với sudo. Nó không thay đổi môi trường (ít nhất là chủ yếu): hãy thử chạy sudo bash -c 'echo $HOME', bạn sẽ nhận được thư mục chính của mình thay vì thư mục gốc.
Ruslan

1
Đó là nguyên nhân trong 18.04 của tôi
Hanynowsky


2

Có một plugin được gọi là vim-lastplace (Tôi là tác giả) sẽ mở các tệp của bạn nơi bạn rời đi. Nó cải thiện các đề xuất trên bằng cách bỏ qua các thông báo cam kết vì bạn thường chỉnh sửa một tin nhắn mới và muốn bắt đầu ở đầu tệp tin nhắn cam kết.


Tại sao các downvote? vim-lastplace thực hiện chính xác những gì OP yêu cầu và thậm chí còn tốt hơn câu trả lời được chấp nhận (có một số lỗi trong đó).
Greg Dietsche

0

Trong trường hợp của tôi, vi là một liên kết tượng trưng : /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Thứ hai không có tính năng vim thực sự. Việc cài đặt gói 'vim' (sử dụng synaptic hoặc apt-get) đã tạo ra liên kết tượng trưng này /usr/bin/vim.basicvà điều này đã khắc phục được sự cố.


-1

Có một sai lầm trong giải pháp Nấm âm lịch. Đây là sự điều chỉnh:

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

Tại sao bạn tin rằng giải pháp của bạn là chính xác? Nó trông rất giống nhau, nhưng đối với dấu gạch chéo ở đầu dòng. Nếu có, họ không nên ở cuối dòng cho biết lệnh tiếp tục ở dòng tiếp theo ...? Ngoài ra, câu trả lời được chấp nhận chỉ nói về việc bỏ ghi chú một phần trong tệp cấu hình toàn cầu, được cài đặt cùng với vim. Rõ ràng điều này đã giải quyết vấn đề. Lỗi ở đâu?
Nepeavere

Bởi vì nếu tôi sao chép / dán giải pháp đầu tiên, tôi đã gặp lỗi. Và tôi đã đăng nội dung của /usr/share/vim/vim74/vimrc_example.vim (bao gồm các dấu gạch chéo ngược ở đầu).
Arnaud

1
@Amaud khu vực dòng đã được cung cấp trong tệp, nhưng đã nhận xét. Bạn chỉ cần xóa "ký tự ở đầu dòng để bỏ ghi chú chúng. Không cần phải "sao chép / dán giải pháp đầu tiên".
ADTC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.