Hiển thị lịch sử lệnh với showcmd


11

Khi sử dụng set showcmdVim hiển thị các lệnh một phần trong dòng cuối cùng của màn hình. Ví dụ, trong chế độ Bình thường khi gõ lệnh dt., dòng cuối cùng hiển thị dtvà sau đó, khi bạn nhấn .lệnh hoàn tất và do đó không có gì được hiển thị.

Có cách nào để hiển thị các lệnh đầy đủ? Ví dụ khi gõ dt.gU(, đầu tiên dt.sẽ được hiển thị; và khi bắt đầu gõ lệnh thứ hai, lệnh đầu tiên sẽ bị xóa, do đó cuối cùng chỉ gU(hiển thị.

Điều này có thể hữu ích ví dụ trong việc minh họa GIF; và để kiểm tra xem bạn đã gõ những gì bạn muốn nếu bạn gặp phải một kết quả không mong muốn.


1
Một lệnh đầy đủ là gì? Điều dtnày được hiển thị bởi vì đó là toán tử hiện tại đang chờ xử lý. Một khi nó được đưa ra một chuyển động, nó không còn là một nhà điều hành đang chờ xử lý. Giả sử chúng ta đã đi xa hơn, và đã làm dt.gU(gu)dawnhư vậy. Là tất cả "một lệnh đầy đủ", hay đó là bốn lệnh đầy đủ, hay cái gì khác?
davidlowryduda

@mixedmath đối với tôi sẽ được tính là 4 lệnh. Đoạn thứ hai của câu trả lời cố gắng làm rõ những gì tôi muốn nói.
Gonçalo Ribeiro

2
Từ quan điểm của Vim, dt.gU(có 2 lệnh: dt.gU(.... Vì vậy, những gì bạn thực sự muốn là hiển thị một số loại lịch sử lệnh (Vim đã hiển thị "toàn bộ comamnds").
Martin Tournoij

@Carpetsmoker, yeah, đó có thể là những gì tôi muốn. Cảm ơn bạn đã chỉnh sửa tiêu đề câu hỏi.
Gonçalo Ribeiro

3
Tôi đã chọc vào mã nguồn Vim hoạt động trên lịch sử bình thường . Trong src/normal.ccác cuộc gọi đang clear_showcmd()ở một vài nơi ( normal_cmd(), do_pending_operator(), end_visual_mode()). Tôi đang chơi với một tập tin showcmd_bufvào những điểm đó, trông khá tốt, nhưng tôi chắc chắn rằng bạn không thể có được những gì bạn muốn mà không sửa đổi mã nguồn Vim tương tự và xây dựng lại nó. Tất nhiên, làm như vậy có thể là giá trị rắc rối để làm gifs của bạn.
John O'M.

Câu trả lời:


9

Tôi không thể tìm thấy bất kỳ cách nào để làm điều này trong một Vim thông thường. Tuy nhiên, nếu bạn sẵn sàng vá Vim, những điều sau đây có thể phù hợp với bạn.

Bản vá rất đơn giản (áp dụng cho Vim-7.4.052) sẽ vô hiệu hóa bản cập nhật thực tế trên màn hình để xóa lịch sử ở cuối lệnh thông thường. Nó thực hiện điều này bằng cách trả về việc có hay không showcmd_is_clearđược đặt trước khi cập nhật màn hình ,. (cách khác, bạn có thể nhận xét ra câu lệnh if và để lại chỉ là một bản gốc returndòng. Lưu ý : Các miếng vá bên dưới không dán rất tốt, bạn có thể phải áp dụng điều này bằng tay, mặc dù nó chỉ là một lớp lót ngắn. lưu ý : Tôi không nhận xét thực tế display_showcmd()vì nó dường như được sử dụng trong chế độ trực quan để cập nhật hiển thị số lượng dòng được chọn hoặc các thứ khác có thể khác. Tôi chưa thử nghiệm rộng rãi điều này.

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

Kết quả trông như thế này:

Screencast hiển thị các bản vá

Một vài điều thú vị cần lưu ý:

  • Này cho thấy thậm chí cử động đơn giản, giống như j, k, bvv
  • Các xlệnh thực sự trở nên dltrong showcmd_buf.
  • Các lệnh thay đổi dòng dưới cùng xóa sạch vùng showcmd (ví dụ: sử dụng :lệnh hoặc vào chế độ chèn (ít nhất là trong thiết lập của tôi))
  • Chương trình chụp đã dừng ghi lại nhiều nét sau khi tôi gõ một ", nhưng chuỗi khóa của tôi hiển thị trong cửa sổ vim cho thanh ghi dài được chỉ định của bạn.
  • Không được hiển thị trong dàn diễn viên, nhưng nhấn escở chế độ bình thường sẽ hiển thị ^[trong khu vực showcmd

4

Ngoài giải pháp John , có một cách khác để hiển thị tất cả các tổ hợp phím vim được nhấn bằng cách sử dụng -wtham số ghi lại tất cả các ký tự mà bạn nhập trong tệp. Vấn đề là, vim chỉ viết tổ hợp phím khi bạn thoát Vim. Đây là cách VimGolf hoạt động.

Để khắc phục điều này, Kana Natsuno đã đưa ra bản vá đơn dòng này , vô hiệu hóa bộ đệm của -wtùy chọn, do đó bạn có quyền truy cập vào luồng phím bấm thời gian thực. Sau đó, vấn đề là đọc chúng (ví dụ tail -f), phân tích cú pháp hoặc bạn có thể cố gắng hiển thị chúng trong thanh trạng thái ( :set statusline).

Kiểm tra bản dựng Vim tùy chỉnh bằng cách sử dụng nhánh gõ phím trực tiếp của Drew của MacVim, để có được luồng phím bấm thời gian thực.

Nguồn: Vimprint - trình phân tích cú pháp gõ phím Vim tại blog Drew Neil

Điều này hữu ích nếu bạn muốn tiết lộ tổ hợp phím được nhấn Vim trong hướng dẫn bằng video hoặc GIF.

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.