Cách đặt hoặc tìm tên lệnh của plugin Sublime Text

Sep 20 2020

Tôi đang cố gắng viết một Plugin ST3 cho máy chủ js nút của mình. Để chạy nó, tôi đang gọi lệnh view.run_command('Node js.nodejs').

PackagesThư mục Sublime Text của tôi trông giống như sau:

│   main.py
│   text_example_one.py
│
├───Node js
│       Nodejs.py
│
└───User
    │   main.py
    │   Package Control.last-run
    │   Package Control.sublime-settings
    │   Preferences.sublime-settings
    │
    └───Package Control.cache
            01524fae79697630d0454ba3fabd9414
            01524fae79697630d0454ba3fabd9414.info

Các ../Packages/Node js/Nodejs.pytập tin chứa đoạn mã sau:

import sublime, sublime_plugin

class TryCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        print("It's working")
        self.view.insert(edit, 0, "Hello, World!")

Không có gì xảy ra khi view.run_command('Node js.nodejs')được gọi, hãy xem hình ảnh của cửa sổ tại đây .

Không có lỗi nào được nêu ra nhưng "Hello, World!"thông báo không được chèn và "It's working"không được in trong bảng điều khiển.

Trả lời

1 mattst Sep 20 2020 at 12:48

Plugin của bạn không được gọi bằng view.run_command('Node js.nodejs')lệnh. Để chạy plugin của bạn bạn nên gọi trylệnh, ví dụ view.run_command("try"). Đây là lời giải thích tại sao:

Tên lệnh của các plugin Sublime Text bắt nguồn từ tên lớp của chúng . Ví dụ lớp sau ...

class PrintHelloInConsoleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        print("Hello")

... có thể được chạy bằng cách gọi print_hello_in_consolelệnh. ví dụ

// Run from a plugin or in the console
view.run_command("print_hello_in_console")

// Run from keys by adding a key binding
{"keys": ["ctrl+shift+y"], "command": "print_hello_in_console"},

Để lấy tên lệnh từ tên lớp trước tiên hãy xóa hậu tố Commandkhỏi tên lớp. Thứ hai chuyển đổi những gì còn lại của tên lớp từ CamelCasethành snake_case. Vì vậy, một plugin định nghĩa class PrintHelloInConsoleCommandđược gọi bằng print_hello_in_console lệnh .

  • Tên lớp là: PrintHelloInConsoleCommand
  • Xóa lệnh khỏi tên lớp:
    PrintHelloInConsoleCommand --> PrintHelloInConsole
  • Chuyển đổi CamelCase thành solid_case :
    PrintHelloInConsole --> print_hello_in_console
  • Tên của lệnh cần gọi là: print_hello_in_console

Lớp của bạn, class TryCommand(sublime_plugin.TextCommand)có thể được chạy bằng cách gọi trylệnh, tức là view.run_command("try").


Dưới đây là một số ví dụ khác:

  • class ClearConsoleCommand(sublime_plugin.WindowCommand)
    "clear_console"Lệnh ⟶
  • class InsertDateTimeCommand(sublime_plugin.TextCommand)
    "insert_date_time"Lệnh ⟶
  • class TestOKCommand(sublime_plugin.TextCommand)
    ⟶ ""Không có lệnh nào được tạo - không sử dụng từ viết hoa, ví dụ: "OK"in "TestOK". Lưu ý rằng điều này không tạo ra một "test_o_k"lệnh
  • class MoveSelection(sublime_plugin.TextCommand)
    "move_selection"Lệnh ⟶ - lệnh này hoạt động bất chấp việc bỏ sót "Command"tên lớp. Tại thời điểm viết bài, yêu cầu đó không được ST thực thi nghiêm ngặt (nhưng điều đó có thể thay đổi trong các phiên bản sau)
  • class AutoSaverEvents(sublime_plugin.EventListener)
    ⟶ ""Không có lệnh nào được tạo - trình nghe sự kiện không được gọi nên không có lệnh nào được tạo và ST không mong đợi tên lớp kết thúc bằng"Command"

Để biết thêm thông tin về các plugin, hãy xem phần plugin của Tài liệu Không chính thức Sublime Text có nhiều thông tin hơn tài liệu chính thức.