Lịch sử lệnh được giải quyết như thế nào giữa nhiều phiên bản của Vim?


15

Vim giữ một lịch sử của các lệnh ex (có thể truy cập thông qua :q:) và lịch sử đó vẫn tồn tại sau khi thoát.

Nếu tôi chạy nhiều phiên bản của Vim (cùng một người dùng, cùng một thư mục chính), Vim sẽ phân xử giữa các lịch sử lệnh như thế nào? Có vẻ như quá trình cuối cùng để thoát chiến thắng. Có cách nào để giữ lịch sử lệnh của tất cả các trường hợp không?


1
Có thật không? Lịch sử này không tồn tại sau khi bỏ thuốc cho tôi. (Vim 7.4.52, Ubuntu 14.04)
Doorknob

3
@Doorknob Hãy chắc chắn rằng bạn ~/.viminfothuộc sở hữu của bạn. Một lỗi phổ biến là mọi người chạy sudo vim ...mà nếu bạn chưa chạy vim với tư cách là người dùng của chính bạn trước đó, sẽ tạo ~/.viminfonhư root. Nếu đó là vấn đề, tôi khuyên bạn nên học cách sử dụng sudoedithoặc sudo -echỉnh sửa các tệp đặc quyền.
jamessan 4/2/2015

@jamessan Huh, có vẻ như đó thực sự là vấn đề; chown'.Viminfo của tôi trở lại chính tôi đã sửa nó. (Không chắc quyền sở hữu của nó đã được thay đổi thành root như thế nào, vì tôi đã luôn sử dụng sudoedit, nhưng ồ.)
Doorknob

Câu trả lời:


10

Câu trả lời cho câu hỏi tiêu đề của bạn là những gì bạn quan sát. Từ hướng dẫn sử dụng vim:help 21.3

Khi bạn chạy Vim nhiều lần, lần thoát cuối cùng sẽ lưu thông tin của nó. Điều này có thể khiến thông tin mà Vims thoát trước đó được lưu trữ bị mất. Mỗi mục chỉ có thể được ghi nhớ một lần.

Tuy nhiên, tên tệp của tệp viminfo (nơi lưu trữ lịch sử lệnh, trong số những thứ khác như dấu toàn cục và nội dung đăng ký, nếu được định cấu hình) có thể thay đổi! Điều này có nghĩa là bạn có thể thiết lập các 'lịch sử' khác nhau cho các dự án hoặc trường hợp khác nhau của vim. Giả sử bạn không chạy nhiều hơn một phiên bản vim cho mỗi dự án, quản lý tên tệp viminfo thông qua vimrc (hoặc plugin cài đặt dự án khác) là một cách tuyệt vời để xử lý việc này.

Thiết lập tập tin viminfo thay thế

Để quản lý cấp dự án, chúng tôi muốn định cấu hình vim để lưu viminfo của bạn vào một tệp khác. Điều này có thể được thực hiện trong một vim đang chạy trước khi thoát hoặc bởi vimrc của bạn, ví dụ bạn có thể có các dòng trong vimrc phát hiện một thư mục cụ thể thuộc về một dự án.

:set viminfo+=nPath/to/custom/viminfofile

Một ví dụ về việc vimrc tự động thiết lập điều này dựa trên thư mục:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Kết quả của những điều trên là lịch sử dành riêng cho dự án sẽ được tải khi khởi động và lưu khi thoát, nếu vim được khởi chạy trong thư mục / dự án / projA.

Tải một viminfo thay thế trong khi khởi động

Điều này tốt cho trường hợp bạn muốn lưu lịch sử của mình sang một bên và tải nó sau, mà không cần quản lý nó ở cấp dự án.

Đầu tiên, để lưu lịch sử, bạn thêm vào tùy chọn viminfo như trên trước khi thoát. Sau đó để tải lịch sử, khởi chạy vim với tùy chọn -i

vim -i Path/to/custom/viminfofile

Nếu bạn không muốn thoát vim để lưu tệp viminfo, bạn có thể sử dụng :wv( :wviminfo). Điều này sẽ lưu tệp viminfo mà không thoát vim theo cài đặt n ở trên. Và, bạn cũng có thể thực hiện :wv SomeOtherFileđể lưu vào một vị trí không giống với cài đặt trong tùy chọn viminfo. Điều này có thể thuận tiện hơn so với việc thiết lập tên tệp để sử dụng khi thoát, nhưng không ngăn vim sử dụng tệp mặc định sau khi thoát.

Ví dụ: trong vim đầu tiên:

:wv ~/customInfo

và trong thiết bị đầu cuối thứ hai:

vim -i ~/customInfo

Hoặc, nếu một vim thứ hai đang chạy và bạn muốn tải viminfo:

:rv ~/customInfo

Lưu ý rằng :wv:rvkhông thay đổi tên của tệp vim sẽ lưu khi thoát cũng như tên của tệp được đọc trong khi khởi động.

Thông tin thêm

Mô tả về set viminfo+=nSomePath: Chúng tôi sử dụng lệnh set để điều chỉnh tùy chọn có tên viminfo. Các +=dấu hiệu cho thấy chúng tôi muốn thêm vào tùy chọn, không thay đổi mọi thứ. Chúng tôi nối thêm ntùy chọn chỉ định tên tệp cho viminfo. Ngay sau khi nchúng tôi có SomePathtên tệp sẽ được sử dụng để lưu viminfo.

Tài liệu cho wv( :help wv) chỉ ra rằng lệnh này trước tiên sẽ đọc tệp viminfo, sau đó hợp nhất giữa thông tin cũ và thông tin mới. Cho đến nay tôi không có thông tin về cách hợp nhất hoạt động trong trường hợp này, nhưng tôi đoán nó sẽ giữ dấu cho các tệp và thanh ghi không xác định không được đặt trong phiên hiện tại.

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.