Làm thế nào để vimgolf ghi lại tất cả các tổ hợp phím?


10

Thỉnh thoảng tôi thích tham gia vào một vòng vimgolf . Nó có thể được khai sáng.

Làm thế nào họ có thể ghi lại tất cả các tổ hợp phím? Đó phải là một tính năng vim. Bất cứ ai có ý tưởng làm thế nào để làm điều đó. Nó có thể có ích để ghi lại mọi thứ trong một số trường hợp nhất định.


1
Tôi mới phát hiện ra rằng chúng tôi có một câu hỏi khá giống nhau ở đây
statox

Câu trả lời:


10

Họ có thể sử dụng tham số tích hợp -w, xem :h -w:

-w {scriptout}  All the characters that you type are recorded in the file
        "scriptout", until you exit Vim.  This is useful if you want
        to create a script file to be used with "vim -s" or
        ":source!".  When the "scriptout" file already exists, new
        characters are appended.  See also |complex-repeat|.
        {scriptout} cannot start with a digit.
        {not in Vi}

Chỉnh sửa Như Lớp @B đã chỉ ra mã thực tế sử dụng -Wtham số về cơ bản giống như -wnhưng tệp nhật ký bị ghi đè thay vì nối thêm tổ hợp phím vào nó ( :h -W):

-W {scriptout}  Like -w, but do not append, overwrite an existing file.
        {not in Vi}

Đoán tốt! Không -Wphải -w(xem câu trả lời của tôi) nhưng vẫn ...
Lớp B

@BLayer Chơi tốt Tôi quá lười để xem mã của họ :-) Tôi sẽ cập nhật với tài liệu -Wvề cơ bản là giống nhau.
statox

1
Vâng. Chỉ cần chắp thêm vs viết.
Lớp B

Một (tốt) đoán outvote và được chấp nhận trên một câu trả lời dựa trên thực tế nghiên cứu? Một sự bất công nghiêm trọng đã được thực hiện. :( ... LOL
Lớp B

1
'Đây là một cử chỉ cao quý. Tôi khiêm tốn chấp nhận phiếu bầu của bạn, thưa ngài hay thưa bà. Dilly dilly.
Lớp B

14

Tôi không nghĩ nó khá đơn giản nhưng bạn có thể tự mình xem mã Ruby ở đây:

https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf

Tôi thấy một lớp học cho keylogging, cho một.

Đây là lệnh được sử dụng để khởi chạy vimtrong lib / vimgolf / cli.rb :

 vimcmd = GOLFVIM.shellsplit + %W{-Z -n --noplugin --nofork -i NONE +0 
    -u #{challenge.vimrc_path} -U NONE -W #{challenge.log_path} #{challenge.work_path}}

@statox đã (gần như) đúng về -w outfile... -W outfile, thực tế, nó ghi đè lên tệp mà các ký tự được nhập được gửi thay vì nối vào nó. Nhưng như tôi đã nói, không "hoàn toàn đơn giản" ... so sánh nội dung của một trong những tệp đó và những gì được tạo bởi công cụ vimgolf. Đây là từ một vấn đề vimgolf thực tế ...

-W đầu ra khi sao chép rồi dán vào đây:

GI0. ý`gvgý`ZZ

Một số ký tự không in bị "mất dịch".

-W đầu ra khi nó xuất hiện trên màn hình:

^VGI0. ^[<80>ý`gvg^A<80>ý`ZZ

Chà, thật là xấu xí.

vimgolf hiển thị / tải lên đầu ra:

<C-V>GI0. <Esc>gvg<C-A>ZZ

Ahh, tốt hơn rồi.


Cập nhật: Tôi đã dành một vài phút để xem xét kỹ hơn mọi thứ và có một vài thông tin mới.

Đầu tiên, lớp keylogger keylog.rb mà tôi đề cập ở trên thực sự là một phần chính của câu đố nhưng nó thực sự khá đơn giản. Các mã khóa mà Vim phát ra và được lưu trong -Wtệp nhật ký là một byte hoặc ba byte (được biểu thị bằng giá trị byte đầu tiên là 0x80) và có một bản đồ băm cho mỗi trong hai bộ.

Phiên bản một byte ánh xạ giá trị byte thành biểu diễn chuỗi của mã khóa, chẳng hạn như 0hoặc g. Phiên bản ba byte tương tự ánh xạ tới một chuỗi (ví dụ <Esc>hoặc <C-V>) nhưng sử dụng làm khóa cho các giá trị kết hợp của byte hai và ba. Có một số trường hợp ngoại lệ / trường hợp góc được xử lý khác nhau, nhưng phần lớn các mã khóa được giải quyết thông qua tra cứu đơn giản trong hai bản đồ này.

Xem mã cơ bản của mã logger như thế nào tôi có thể nói có gì đó không đúng với những gì tôi đã thấy trong các tệp nhật ký mã khóa (chẳng hạn như ví dụ được dán ở trên). Hóa ra tôi nên sử dụng tệp vimrc theo yêu cầu của quy tắc VimGolf. Đặc biệt dòng này

set t_RV= 

kết quả trong việc đăng nhập chính xác. Ví dụ "xuất hiện trên màn hình" ở trên thực tế sẽ trông như thế này:

^VGI0. ^[gvg^AZZ

Bây giờ người ta có thể thấy đường thẳng từ chuỗi "thô" này đến dạng kết xuất của VimGolf.

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.