2010-10-20 27 views
6

các -w-W tùy chọn của vim có lý thuyết hiệu ứng sau:sử dụng tùy chọn -W của vim

-w {scriptout} Tất cả các ký tự mà bạn nhập vào sẽ được ghi lại trong file "scriptout", cho đến khi bạn thoát khỏi Vim. Điều này hữu ích nếu bạn muốn tạo tệp tập lệnh được sử dụng với "vim -s" hoặc ": source!". Khi tệp "scriptout" đã tồn tại, các ký tự mới được thêm vào. Xem thêm | lặp lại phức tạp |. {scriptout} không thể bắt đầu bằng một chữ số. {not in Vi}

-W {scriptout} Giống như -w, nhưng không thêm, ghi đè tệp hiện có. {không Vi}

Nhưng khi tôi làm điều này, {} scriptout tập tin sẽ luôn luôn bắt đầu với một chuỗi thập lục phân như 80 fd 60 (đôi khi nó là 80 fd 62).

Tôi đang sử dụng gvimportable.exe 7.3 từ portableapps.com. Với công tắc -u NONE, nó cũng vậy.

"Số ma thuật" này là gì? Trong Windows với gvim.exe tôi không thể phát lại tập lệnh của mình cho đến khi tôi đã xóa ba byte hàng đầu đó…

Dường như tính năng này rất hữu ích, được ghi nhận kém.

Cảm ơn câu trả lời của bạn.

+0

Khi tôi thử nghiệm bằng cách sử dụng tùy chọn '-W', vim không thêm bất kỳ ký tự thừa nào vào đầu tệp. Bạn nên thử lại mà không có '.vimrc' bằng cách sử dụng' vim -u NONE -W somefile' –

+0

Đó là những gì tôi đã làm… vẫn còn, 'vim -u NONE -W scriptout', ZQ và 'xxd' my_scriptout sẽ hiển thị' 80fd 605a 51 '(..'ZQ) – Benoit

+0

Tôi đã xem xét điều này một vài tuần trước và không thể tái tạo nó trên Linux ... bây giờ tôi biết bạn đang sử dụng gVim Portable (yay!) Tôi sẽ thử lại trên Windows và xem tôi có thể đoán ra được không. (Ngày mai, không phải hôm nay.) –

Trả lời

6

(Câu trả lời này có thể bị phân mảnh một cách đáng kể, tôi phải tìm một giải pháp nữa vì nó hấp dẫn tôi - không chỉ là tiền thưởng 200: P. và thử nghiệm.)

Tôi hiện có thể tạo lại nó với gvim trên Linux, là /usr/bin/vim.gnome -g; chạy như vim -g không giống nhau.


Delving vào mã: (vô ích trong trường hợp này, nhưng thú vị để làm và học cách làm)

Tôi đã nhìn qua mã nguồn và bây giờ tôi có thể giải thích nó một chút (nhưng không hữu ích!); nó nhận được outfile FILE (src/globals.h:1004) được thiết lập (src/main.h:2275); điều này sau đó được viết vào trong src/getchar.h:1501, theo phương pháp updatescript được sử dụng bởi gotchars (dòng 1215) được sử dụng bởi vgetorpeek, được sử dụng bởi vgetcvpeekc ... (không, tôi không biết nơi này đang diễn ra!) thì chúng được sử dụng ở một số nơi.

Dù sao, tôi cho rằng khóa ở đâu đó trong số src/gui.c, nhưng tôi không biết tại thời điểm này! Nó cũng có thể là một số chuỗi khóa đang được "gửi" (về thể chất hoặc hầu như, tôi không biết), nhưng nhìn thấy như vấn đề là như nhau trên các nền tảng nó có vẻ có nhiều khả năng là một vấn đề Vim hơn khác.


tình huống Thú vị dẫn đến một lời giải thích có thể xảy ra:

Nó cũng đáng trong khi lưu ý rằng nếu bạn tự động bỏ thuốc lá, gvim -u NONE -w scriptout -c quit (:quit sau khi tải) hoặc gvim -u NONE -w scriptout -c quit (tức :quit, không bao giờ cho thấy GUI), các tập lệnh tệp được để trống.

Ngoài ra, nếu bạn gvim mở và sau đó gần nó bằng cách sử dụng nút X, ép không phím:

0000000: 80fd 6280 fd63 80fd 62     ..b..c..b 

Nếu bạn mở gvim, nhấp vào đi, bấm lại và sử dụng :q:

0000000: 80fd 6280 fd63 80fd 6280 fd2c 80fd 2e3a ..b..c..b..,...: 
0000010: 710d          q. 

Vì vậy, tôi nghĩ rằng đó là sự kiện cửa sổ được dịch nội bộ sang nội dung khác. 80 fd 62 là trình tự mở và 80 fd 63 80 fd 62 là trình tự đóng.

Tôi cũng đã tìm thấy một cách khác để kích hoạt 80fd, điều này dẫn tôi đến điều mà một số loại "người dùng có quyền truy cập vào cửa sổ"; theo mặc định với GNOME trong Ubuntu, Ctrl + Alt + S làm điều gì đó với cửa sổ (không thể nhớ nó được gọi là gì; trượt tất cả lên thanh tiêu đề, ứng dụng bên trong mất điều khiển bàn phím, v.v.). gvim ... (bạn biết lý lẽ!), i<Ctrl + Alt + S (ký hợp đồng) Ctrl + Alt + S (mở rộng) >EscZ Q sản xuất này cho tôi:

0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51 ..bi<..c..b>.ZQ 

Tóm tắt: để chúng tôi có những gì tôi tin là giải pháp; gVim bắt các thông điệp cửa sổ dưới dạng nào đó và - cho dù có nên hay không - đặt chúng trong scriptout của nó. Nếu bạn nghĩ rằng nó không nên (hoặc muốn biết lý do tại sao họ đang ở trong hoặc nếu họ thậm chí có nghĩa là được hoặc cho dù bạn nên quan tâm ở tất cả), yêu cầu trên danh sách Vim, tôi nghĩ.

+0

Lưu ý rằng thử nghiệm này đã được thực hiện hoàn toàn trên Linux khi tôi phát hiện ra vấn đề đã được thể hiện ở đó cũng như trên Windows. Nếu bạn muốn, tôi có thể chơi với nó theo cách tương tự trên Windows, hoặc bạn có thể. Tôi nghĩ rằng bạn sẽ tìm thấy gần như cùng một điều: làm những việc với Window chính nó đặt mọi thứ vào kịch bản. –

1

Dự đoán tốt nhất của tôi là đây là lỗi trong mã GUI của gVim.

Sử dụng gVim 7.3, nếu tôi chạy gvim -u NONE -W scriptout thì tôi thấy sự cố, nhưng nếu tôi chạy vim -u NONE -W scriptout thì không có byte không mong muốn.

Tôi cũng đã thử nghiệm Vim 7.2 từ vỏ trong Linux, phiên bản của Vim trong Snow Leopard (7.2), và GUI và các phiên bản thiết bị đầu cuối của MacVim 7.2 (với mvim -W/Applications/MacVim/Contents/MacOS/Vim -W, tương ứng) và tất cả đều làm việc một cách chính xác.

+0

cảm ơn bạn đã trả lời.Tôi có thể bị ràng buộc để xem xét mã để tìm hiểu lý do tại sao nó làm như vậy. Bạn có thể thử điều này dưới Linux không? – Benoit

+0

@Benoit Yup, hoạt động tốt trên Linux, và cả từ thiết bị đầu cuối và GUI trên OS X. Tôi đã chỉnh sửa câu trả lời của mình để hiển thị điều này. – Rich

Các vấn đề liên quan