2011-10-25 44 views
16

Khi tôi thoát khỏi VIM và mở lại cùng một tệp, tôi được định vị ở đầu tệp. Làm thế nào tôi có thể duy trì vị trí con trỏ cuối cùng?Giữ nguyên vị trí chỉnh sửa cuối cùng trong VIM

+0

bản sao có thể có của [Làm thế nào để bạn tạo Vim đưa bạn trở lại vị trí của bạn khi bạn chỉnh sửa tệp lần cuối?] (Http://stackoverflow.com/questions/1682536/how-do-you-make-vim-take -you-back-nơi-bạn-là-khi-bạn-last-edited-a-file) – mloskot

+0

: giúp viminfo nên cho bạn biết những gì bạn cần –

Trả lời

21

Các "out of the box" .vimrc phép này với tuyên bố:

source $VIMRUNTIME/vimrc_example.vim 

Bạn chỉ có thể cần phải khôi phục tuyên bố này trong .vimrc của bạn. Trong mọi trường hợp, hãy xem vimrc_example.vim và cũng có thể xem chức năng line()in the Vim manual để thảo luận về cách hoạt động của nó.

+0

Điều đó làm việc cho tôi trên mac os x. Tôi cp'd các tập tin, chmod 600, và cuộc sống là lớn. – tggagne

0

Bạn có thể thử lệnh :mks (thực hiện phiên). Nó lưu trữ một tập tin kịch bản mà, khi chạy qua vim, khôi phục phiên chỉnh sửa hiện tại của bạn, bao gồm tất cả các tệp đang mở và vị trí con trỏ.

+0

Nó tạo ra một tập tin Session.vim trong thư mục địa phương. Đây không phải là những gì tôi muốn. Tôi bây giờ vim có thể tự động lưu các vị trí chỉnh sửa và khôi phục lại nó khi cùng một tập tin được mở ra. Tôi chỉ không biết làm thế nào. –

10

Taken từ http://amix.dk/vim/vimrc.html

" Return to last edit position when opening files (You want this!) 
autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \ exe "normal! g`\"" | 
    \ endif 
+0

Bạn có thể giải thích câu lệnh 'if' đang làm gì ở đây không? Tôi đang đọc nó là "Chỉ khôi phục con trỏ nếu con trỏ sau dòng đầu tiên hoặc trước dòng cuối cùng", và nó không rõ ràng với tôi những gì khác biệt mà làm cho. Tôi hiện đang thêm 'autocmd BufReadPost * bình thường! g \ '" zv' để vimrc của tôi và nó có vẻ làm việc, nhưng tôi đoán tôi không hiểu những cạm bẫy tiềm năng của việc phục hồi nhãn hiệu vô điều kiện – robru

+1

Ah, nếu tập tin được cắt ngắn bên ngoài vim, và dấu của vim là trên một dòng mà không còn tồn tại, vim ném một lỗi. Cố định rằng với 'autocmd BufReadPost * im lặng! bình thường! g \' "zv' – robru

4

Có một plugin (Tôi là tác giả) gọi là vim-lastplace đó một cách thông minh sẽ đưa bạn trở về chỉnh sửa cuối cùng mà bạn thực hiện.

Nó cũng có tùy chọn cấu hình để bỏ qua một số loại tệp nhất định. Theo mặc định, nó sẽ bỏ qua các thông điệp cam kết cho git, svn và mercurial. Đối với các loại tệp này, nó sẽ bắt đầu con trỏ của bạn ở dòng đầu tiên. Đoạn mã ở trên sẽ nhảy vào giữa tệp tin cam kết của bạn (nơi bạn đã dừng lại trong lần commit trước) mặc dù đó có thể không phải là những gì bạn muốn. vim-lastplace khắc phục sự cố này.

5

Vị trí chỉnh sửa cuối cùng được Vim tự động lưu giữ và có sẵn dưới dạng dấu nhảy "đặc biệt" .. Các nhãn hiệu đặc biệt khác bao gồm " (vị trí bạn đã lưu từ) và ' (vị trí bạn đã nhảy từ).

Bạn có thể nhảy đến một dấu ấn bằng cách gõ '<mark>, vì vậy '. sẽ đưa bạn đến nơi chỉnh sửa cuối cùng, '' sẽ đưa bạn trở lại nơi bạn đã và '" sẽ đưa bạn đến vị trí bạn đã lưu tệp ở.

Điều đó và nhiều hơn nữa về dấu Vim tại Vim.Wikia.

Các vấn đề liên quan