Có vẻ như bạn đang tìm kiếm một ví dụ hay tham khảo về cách xử lý bàn phím để thúc đẩy chèn văn bản vào bộ đệm Visual Studio.
Thật không may đây không phải là câu hỏi có câu trả lời thẳng về phía trước. Xử lý bàn phím trong Visual Studio là phức tạp nhất và tóc kéo bực bội ở lần. Tôi đã cố gắng giữ câu trả lời này càng đơn giản càng tốt nhưng tiếc là chủ đề không cho chính nó đơn giản là
Để bắt đầu có ít nhất 5 cơ chế khác nhau mà Visual Studio định tuyến đầu vào bàn phím thành lệnh.
Điều nào bạn cần phải móc vào phụ thuộc vào đồng uple of factors
- Phiên bản Visual Studio nào bạn muốn chương trình bổ trợ hoạt động?
- gì loại add-in, bạn sẽ có tòa nhà: một Addin thực tế, Vs trọn gói hoặc VSIX
- Làm thế nào sâu sắc mà bạn quan tâm chiến thắng cuộc chiến cho bàn phím đầu vào
nào sau đây bạn cần phải móc vào phụ thuộc rất nhiều vào cách bạn muốn addin của bạn hoạt động và trong phiên bản Visual Studio nào bạn muốn nó hoạt động. Mặc dù có 2 tuyến đường cơ bản mà bạn có thể thực hiện mặc dù
Đầu tiên là phát triển Gói Visual Studio và đăng ký DTE.Command
cho mỗi phím nóng trong tiện ích mở rộng của bạn. Sau đó, bạn cần phải thêm vào IOleCommandTarget
vào chuỗi bộ lọc IVsTextView
s để xử lý các lệnh của bạn. Cách tiếp cận này sẽ cho phép bạn xử lý các phím nóng của bạn trong phần lớn các kịch bản.
Thứ hai là phát triển một VSIX, móc vào chuỗi IOleCommandTarget
của IVsTextView
và chặn các lệnh Visual Studio thực ánh xạ tới các phím nóng của bạn.
Cả hai cách tiếp cận này đều có những thăng trầm nhưng câu trả lời của tôi đã hơi dài quá. Nếu bạn có thể cho tôi thêm một số chi tiết, tôi có thể thử và cung cấp cho bạn câu trả lời ngắn gọn và hữu ích hơn.
Ví dụ: VsVim xử lý bàn phím khá rộng rãi cho Visual Studio và có một ví dụ cho bất kỳ phương pháp nào ở trên mà tôi đã đề cập.
Hãy cho tôi biết cái nào lợi ích bạn và tôi có thể chỉ cho bạn đến đúng địa chỉ trong mã nguồn.
Ngoài ra trong khi làm việc bản thân mình để tìm ra các mớ đầu vào bàn phím tôi đã cố gắng để giữ một bản ghi về những gì tôi đã học được. Đó là chưa hoàn toàn được cập nhật nhưng tài liệu này mô tả các khía cạnh cơ bản hơn về cách đầu vào được chuyển
EDIT
Jon đã nêu trong bình luận của VSIX + IOleCommandTarget
đường
Đây là cách tiếp cận đơn giản nhất của IMHO. Tuy nhiên, một điều cần lưu ý là cách các ràng buộc lệnh ảnh hưởng đến dữ liệu được chuyển xuống chuỗi IOleCommandTarget
. Visual Studio lệnh ràng buộc xảy ra trước khi dữ liệu được chuyển đến chuỗi IOleCommandTarget
. Vì vậy, nếu một đầu vào quan trọng nhất định được ràng buộc với một lệnh, nó sẽ được chuyển xuống IOleCommandTarget
làm lệnh và không phải là đầu vào bàn phím.
Ví dụ CTRL-Z
thường được ánh xạ tới lệnh Visual Studio Undo
. Nếu người dùng truy cập CTRL-Z
thì IOleCommandTarget
sẽ thấy lệnh Hoàn tác chứ không phải nhập bằng bàn phím CTRL-Z
.
Dưới đây là một vài mẫu bạn có thể quan tâm đến việc xem xét
- VsCommandTarget: Triển khai mẫu của
IOleCommandTarget
- OleCommandUtil: Được sử dụng để chuyển đổi dữ liệu thông qua vào
IOleCommandTarget
vào lệnh thực tế và bàn phím đầu vào
- HostFactory: Chi tiết cách thực sự kết nối một số
IOleCommandTarget
vào số IVsTextView
từ tiện ích mở rộng VSIX.
Nghe như "đoạn mã" trên steroid. Tôi tự hỏi nếu có cái gì bạn có thể tận dụng từ tính năng đó. –
Nếu việc mở rộng không dựa vào các chi tiết theo ngữ cảnh của codebase, có lẽ một kịch bản AutoHotKey sẽ đủ. – AakashM
Tôi vừa phát hành Tiện ích mở rộng như thế này thực sự .. Hãy xem tại đây: http://yngvenilsen.wordpress.com/2011/11/19/zencoding-visual-studio-2010-extension-v1-7/ –