Trong vim, làm thế nào để tôi có được một tệp để mở ở cùng một số dòng tôi đã đóng nó vào lần trước?


141

Tôi muốn cấu hình vim để mở một tệp tại cùng một nơi tôi đã dừng lại tại.

vim 

: '"dấu nháy đơn theo sau là dấu ngoặc kép chuyển hướng dòng thay đổi cuối cùng của bạn
Dhiren Hamal

Câu trả lời:


195

Từ /etc/vim/vimrctệp của Ubuntu , ví dụ này được nhận xét:

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

Nếu điều này không hoạt động, một vấn đề phổ biến là không có quyền sở hữu ~/.viminfotệp của bạn . Nếu đây là trường hợp, sau đó chạy:

sudo chown user:group ~/.viminfo

nơi người dùng là của bạn usernamegroupthường giống với tên người dùng của bạn.


9
Autocmd đi thẳng ra khỏi tài liệu vim. Xem: trợ giúp nhảy vị trí cuối cùng
dùng55400

19
Nếu trích dẫn duy nhất trong dòng áp chót được thay đổi thành backtick, nó sẽ nhảy đến vị trí con trỏ thực tế, không chỉ phần đầu của dòng đó:\| exe "normal! g`\"" | endif
u2622

4
Phần đã chownkhắc phục sự cố cho tôi. Ngả mũ!
Slowpoison

2
Cuối cùng có người chỉ ra rằng .viminfo của tôi được sở hữu bởi root vì một số lý do! Điều này cần phải có trong 100 tài liệu khác mà tôi đọc.
Jack

2
Chỉ muốn +1 chown user ~/.viminfobổ sung. Tôi đã cố gắng để tìm ra điều này trong một giờ và bạn vừa tiết kiệm được ngày của tôi.
Christopher Reid

48

Nếu bạn không quan tâm đến tự động hóa giao dịch vì đơn giản, chỉ cần nhấn tổ hợp phím '"(dấu nháy đơn, theo sau là dấu ngoặc kép) khi mở tệp, bạn sẽ nhảy đến nơi bạn đang ở. Đây thực chất là những gì câu trả lời của @ marcog đang làm.


24
  :h views-sessions

Bạn có thể đặt cái này trong .vimrc của bạn :

  au BufWinLeave * mkview
  au BufWinEnter * silent loadview

các khung nhìn sẽ được đặt trong $ HOME / .vim / view. Bạn có thể cần phải tạo các thư mục này.


Tôi thích câu trả lời này vì câu hỏi khác đề cập đến một tập tin / etc / vim / không tồn tại trên máy Mac của tôi.
MarkHu

15

Bạn có thể bắt đầu vim mà không chỉ định tên tệp bằng cách sử dụng

vim 

Tiếp theo nhấn CTRL + O hai lần để di chuyển đến vị trí cuối cùng trong bất kỳ tệp nào bạn đã làm việc.


Nếu bạn đã cài đặt NERDTree, nhấn Co hai lần có thể mở NERDTree trong bộ đệm hiện tại. Trong trường hợp của tôi, đôi khi tôi cần nhấn Co tối đa năm lần, nhưng cuối cùng tôi cũng nhận được hiệu ứng được mô tả bởi @MatAff.
ashrasmun

Nhấn Ctrl-cmột lần là đủ cho tôi. Ngoài ra, nhấn Ctrl-cnhiều hơn sẽ đưa tôi trở lại trong histroy vị trí con trỏ (thậm chí mở các tệp chưa mở có liên quan). Tôi sử dụng Neovim 0.4.2, nhưng sự hiểu biết của tôi là nó cũng áp dụng cho vim.
T_T

7

Nếu bạn đã bật viminfo, đơn giản là `0đi đến vị trí tệp được chỉnh sửa cuối cùng. Bạn sẽ nhận thấy rằng đây chỉ là một lệnh 'đi đến đánh dấu';

Thật vậy, sau này bạn có thể thực hiện '3 để đi đến vị trí được chỉnh sửa trước đó (có thể trong một tệp khác), sau đó quay lại vị trí cuối cùng với `0một lần nữa

Có một cái nhìn

 :marks

để xem các địa điểm ghi nhớ. Cũng lưu ý rằng viminfo lưu trữ tất cả các loại nội dung khác (như nội dung của các thanh ghi, đánh dấu trên mỗi tệp, lệnh và lịch sử tìm kiếm). Hầu hết mọi người đã kích hoạt điều này vì lý do rõ ràng


`0 không hoạt động với tôi trên phiên bản vim 7.4.1689 trên mac. Nhưng '0 không có mẹo. Đây có phải là một lỗi đánh máy trong câu trả lời?
alamoot

@alamoot không phải vậy, hãy xem vimdoc motion.txt - Kiểm tra ký tự mà `khóa của bạn thực sự tạo ra hoặc làm:verbose map `
sehe

bạn đúng rồi. Theo vimdoc cả hai đều đúng!
alamoot

6

Có một plugin 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 tin nhắn 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ất cả những gì bạn có thể làm mà không cần plugin là tốt nhất. nhắm đến .vimrc: mã càng nhỏ thì càng nhẹ và nhanh hơn
nilon

1

Đôi khi ~/.viminfotrở thành chỉ đọc hoặc người dùng của bạn không có quyền truy cập vào tệp. Đó cũng có thể là một lý do mà vim không lưu trữ vị trí con trỏ của bạn khi bạn đóng tệp của mình.

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.