Có cách nào để chia sẻ lịch sử lệnh vim?


8

Tôi có thể chia sẻ lịch sử lệnh Vim qua các phiên bản trong thời gian thực không?

Điều đó có nghĩa là những gì mọi người làm trong bash theo cách này:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Đó là, khi tôi chạy một lệnh echo test1trong một shell, và sau đó nhấn Upvào một shell khác, tôi thấy echo test1. (Nói chính xác, người ta phải nhấn Entertrước Upđể nó hoạt động.)

Điều này có thể với Vim? Lúc đầu tôi nghĩ sử dụng +clientservertùy chọn sẽ có kết quả. Nhưng đó dường như là một cái gì đó khác.


Câu trả lời:


13

Lịch sử lệnh được lưu trữ trong tệp viminfo ( :help viminfo). Thông thường, nó được đọc khi khởi động và được viết khi thoát, nhưng bạn có thể kiên trì và đồng bộ hóa rõ ràng giữa các phiên bản Vim với sự kết hợp của :wviminfo:rviminfo. Lưu ý rằng điều này sẽ đồng bộ toàn bộ thông tin; tức là cũng đăng ký nội dung, nhãn hiệu, danh sách đệm, v.v.



1

Trong Vim, cách gần nhất bạn có thể nhận được là (như câu trả lời của Ingo và nhận xét của Christian đã đề cập) là:

augroup viminfo
    autocmd!
    autocmd FocusLost   * wviminfo
    autocmd FocusGained * rviminfo
augroup end

Điều quan trọng là phải nhận ra rằng Focus*autocommands không luôn chạy khi bạn sử dụng Vim từ thiết bị đầu cuối, đặc biệt là nếu bạn đang sử dụng tmux hoặc màn hình. Bạn nên kiểm tra điều này trước bằng cách sử dụng :au FocusLost :echoerr "Focus lost!".

Theo như tôi biết thì không có cách giải quyết tốt nếu những autocommands này không phù hợp với bạn. Sử dụng các sự kiện khác (như CursorHold) có vẻ có vấn đề với tôi do vấn đề thời gian gần như chắc chắn sẽ tăng lên.


Neovim đi kèm với "ShaDa", một sự thay thế cho hệ thống viminfo của Vim. Một khía cạnh tốt hơn là hợp nhất các tệp từ các phiên bản khác nhau và mặc dù nó không hỗ trợ trực tiếp đồng bộ hóa giữa nhiều phiên bản ( nhưng ), điều này dường như hoạt động tốt cho ít nhất một nhà phát triển Neovim :

augroup shada
  autocmd!
  autocmd CursorHold * rshada | wshada
augroup end

Xem :help shada-mergingđể biết chi tiết về quá trình sáp nhập.


Lưu ý: Tôi nghĩ Vim 8 cũng giới thiệu chức năng hợp nhất vì nó đánh dấu thời gian các lệnh đã nhập. Xem:h viminfo-timestamp
Christian Brabandt

Tôi đã thử nó trên hệ thống của mình trước khi đăng câu trả lời này @ChristianBrabandt, và nó dường như không hoạt động tốt. Có lẽ tôi đã làm điều gì đó sai.
Martin Tournoij

có lẽ là một lỗi? sẽ cần một ví dụ có thể tái tạo tốt trong danh sách @ vim-dev
Christian Brabandt
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.