2011-07-01 41 views
8

Tôi muốn xây dựng tiện ích mở rộng Visual Studio 2010 VSIX mở rộng một số văn bản dựa trên cuộc gọi đến phương thức (sử dụng Zen Coding selector-based syntax). Lý tưởng nhất, người dùng sẽ nhập một chuỗi văn bản, nhấn phím nóng và chuỗi văn bản sẽ được mở rộng.Mở rộng Visual Studio 2010 mở rộng mã

Tôi đã xem rất nhiều mẫu, nhưng tất cả đều tập trung vào các dịch vụ ngôn ngữ toàn diện hoặc trên các trang sức đơn giản. Lý tưởng nhất, tôi muốn tìm một mẫu làm việc đầy đủ, nhưng tôi muốn được hạnh phúc với các giao diện/lớp học và một số mã.

Một số tài liệu tham khảo Tôi nhìn:

Cập nhật: Tôi biết rằng Resharper và CodeRush làm loại điều. Tôi muốn làm điều này như một plugin độc lập nếu có thể.

+2

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 đó. –

+0

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

+0

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/ –

Trả lời

9

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.
+0

Cảm ơn! Tôi muốn thêm hỗ trợ mã hóa Zen vào Visual Studio, tốt nhất là VSIX. Dưới đây là tổng quan: http://coding.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/ - có vẻ như IOleCommandTarget có IVsTextView sẽ hoạt động? Mã hóa Zen được viết bằng JavaScript, tôi nghĩ rằng tôi có thể gọi nó bằng cách sử dụng .NET JavaScript như IronJs/Jurassic. –

+0

@Jon Tôi đã cập nhật câu trả lời của mình để có thêm chi tiết hơn về kịch bản đó. Vui lòng cho tôi biết nếu bạn cần bất kỳ thông tin nào khác – JaredPar

1

Tôi sẽ xem xét xây dựng trên LiveTemplates của ReSharper. Bạn có thể làm rất nhiều với các macro để làm cho việc mở rộng thông minh hơn so với các ô trống đơn giản. Tôi không phải là một chuyên gia trong lĩnh vực đó, nhưng tôi đã thấy một số mẫu khá phức tạp được xây dựng theo cách này.

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