2015-06-06 42 views
18

Có cách nào để mở rộng các ngôn ngữ/ngữ pháp được hỗ trợ trong Visual Studio Code không? Tôi muốn thêm cú pháp ngôn ngữ tùy chỉnh, nhưng tôi không thể tìm thấy bất kỳ thông tin nào về cách cung cấp dịch vụ ngôn ngữ.Tạo ngôn ngữ tùy chỉnh trong Visual Studio Code

Ai có thể trỏ đến bất kỳ tham chiếu nào hoặc thậm chí là ví dụ về triển khai ngôn ngữ hiện tại không?

+0

séc ra kho Essentials Web Mads Kristensen của trên github. –

+0

Đó là cho VS, nhưng không phải cho Mã VS. –

+0

Xin lỗi, tôi đã bỏ lỡ phần câu hỏi của bạn. Thư mục ~ AppData \ Local \ Code \ app-0.1.0 \ resources \ app \ plugins chứa các plugin ngôn ngữ, bạn có thể sử dụng chúng. –

Trả lời

0

Đó là not possible ngay bây giờ, nhưng là coming soon.

+0

Mặc dù, như Emre Senturk đã đề xuất, bạn có thể thử sử dụng một số tệp nguồn VS Code. – zlumer

+11

Câu trả lời này đã lỗi thời và hiện tại không được chú ý. Tính đến 0.9.0 này bây giờ là sở hữu. – wheredidthatnamecomefrom

2

Sử dụng kỹ thuật đảo ngược, bạn có thể thêm ngôn ngữ mới vào VSCode. Bạn có thể xem xét cách thức các kiểu chữ được thực hiện như một plugin JavaScript và cách nó giao tiếp với node.exe thông qua đường ống. Nhưng đó là một điều khó khăn vì nó đến mà không cần tài liệu Tôi sẽ cung cấp tài liệu ngắn gọn ở đây:

Bạn có thể xác định plugin mới trong thư mục plugin C:\Users\USER\AppData\Local\Code\app-0.3.0\resources\app\plugins.

Sao chép thư mục plugin loại và đổi tên các phần mở rộng tệp đã đề cập và tên ngôn ngữ trong tất cả các tệp sang ngôn ngữ mới của bạn để plugin mới sẽ được sử dụng khi tệp .mylang được mở.

Trong typescriptServiceClient.js bạn thấy rằng một quy trình con đang được chia nhỏ và stdout của nó được ghép với một số new WireProtocol.Reader. Liên kết số mylanguage.exe của riêng bạn (có thể bạn sẽ cần phải tự viết mã đó). VSCode yêu cầu mã nhị phân đó nhận thêm thông tin cụ thể về ngôn ngữ.

Trong typescriptMain.js bạn tìm thấy đăng ký tính năng cho ngôn ngữ. Xóa mọi cuộc gọi đến monaco.Modes.XXXXXXSupport.register trừ monaco.Modes.DeclarationSupport.register.

Bây giờ, hãy mở thư mục trong VSCode chứa tệp .mylang và mở một trong số chúng qua CTRL+P + FileName. Nhấp chuột phải vào số nhận dạng và chọn Go to Definition. VSCode nay gửi một yêu cầu như thế này qua stdin để exe của bạn

{"seq":1,"type":"request","command":"definition","arguments":{"file":"d:/Projects/MyProj/Source/MyFile.mylang","line":45,"offset":9}} 

VSCode hy vọng một câu trả lời như thế này:

Content-Length: 251 
[LINE BREAK] 
{ "seq" : 1, "type" : "response", "command" : "definition", "request_seq" : 1, "success" : true, "body" : [{ "file" : "d:/Projects/MyProj/Source/MyOtherFile.mylang", "start" : { "line" : 125, "offset" : 3 }, "end" : { "line" : 145, "offset" : 11} }] } 

Nếu mọi thứ hoạt động VSCode sẽ mở MyOtherFile.mylang và thiết lập con trỏ đến dòng 124 trong cột 3.

Tự mình thử ;-)

37

Có thể với phiên bản mới 0.9.0. Có tài liệu chính thức về cách thêm ngôn ngữ tùy chỉnh: https://github.com/Microsoft/vscode-docs/blob/0.9.0/release-notes/latest.md

Bạn cần một tệp .tmLanguage cho ngôn ngữ bạn muốn thêm. Bạn có thể tìm các tệp hiện có, ví dụ: trên GitHub hoặc bạn có thể xác định tệp ngôn ngữ của riêng mình. Xem tại đây để có ý tưởng về cách tạo một tài khoản: http://manual.macromates.com/en/language_grammars

Sau khi tìm thấy tệp .tmLanguage bạn có hai cách để tạo tiện ích mở rộng dựa trên nó.

Lựa chọn 1: Sử dụng một máy phát điện Yeoman

  • Cài đặt nút.js (nếu bạn chưa làm)
  • Install yo (nếu bạn chưa thực hiện) bằng cách thực hiện npm install -g yo
  • Cài đặt máy phát điện Yo cho mã: npm install -g generator-code
  • Run yo code và chọn New language support
  • Thực hiện theo hướng dẫn (xác định tệp .tmLangauge, xác định tên plugin, phần mở rộng tệp, v.v.)
  • Trình tạo tạo thư mục cho tiện ích của bạn với tên của plugin trong thư mục làm việc hiện tại của bạn.

Phương án 2: Tạo thư mục trên của riêng bạn

  • Tạo một thư mục với tên của plugin của bạn (chỉ chữ thường). Giả sử chúng ta gọi nó là mylang.
  • Thêm một thư mục con syntaxes và đặt file .tmlanguage bên trong của nó
  • Tạo một file package.json bên trong thư mục gốc của thư mục mở rộng với nội dung như thế này

    { 
        "name": "mylang", 
        "version": "0.0.1", 
        "engines": { 
         "vscode": ">=0.9.0-pre.1" 
        }, 
        "publisher": "me", 
        "contributes": { 
         "languages": [{ 
          "id": "mylang", 
          "aliases": ["MyLang", "mylang"], 
          "extensions": [".mylang",".myl"] 
         }], 
         "grammars": [{ 
          "language": "mylang", 
          "scopeName": "source.mylang", 
          "path": "./syntaxes/mylang.tmLanguage" 
         }] 
        } 
    } 
    

Cuối cùng thêm phần mở rộng của bạn để Visual Studio Code

Sao chép thư mục tiện ích vào thư mục tiện ích mở rộng. Đây là:

  • trên của Windows%USERPROFILE%\.vscode\extensions

  • trên Mac/Linux$HOME/.vscode/extensions

Restart Mã. Bây giờ, tiện ích mở rộng của bạn sẽ tự động chạy mỗi khi bạn mở tệp có đuôi tệp được chỉ định. Bạn có thể thấy tên của plugin được sử dụng ở góc dưới bên phải. Bạn có thể thay đổi nó bằng cách nhấp vào tên của phần mở rộng. Nếu tiện ích của bạn không phải là tiện ích mở rộng duy nhất được đăng ký cho một phần mở rộng tệp cụ thể thì Mã có thể chọn một phần mở rộng sai.

+1

Tôi nhận được một ngôn ngữFileName không được xác định lỗi. Bạn đã từng thấy cái đó chưa? –

+0

Có thể lưu ý rằng 'scopeName' phải giống như trong tệp' .tmLanguage' – gr4nt3d

2

Để mở rộng câu trả lời Wosis, sử dụng tệp .tmLanguage là tùy chọn. Sử dụng thường xuyên .json là hoàn toàn hợp lệ và theo ý kiến ​​của tôi có thể đọc được tốt hơn thay thế.

Đối với một ví dụ xem GitHub VSCode_SQF: sqf.json

Bên trong package.json bạn sẽ chỉ cần phải thay đổi đường dẫn ./syntaxes/mylang.tmLanguage-./syntaxes/mylang.json

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