ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

Terminus

作者: randy3k ST3 排行榜前100

将真实终端带给 Sublime Text

信息

安装

  • 总数 356K
  • Win 205K
  • Mac 73K
  • Linux 79K
2023年8月6日 2023年8月5日 2023年8月4日 2023年8月3日 2023年8月2日 2023年8月1日 2023年7月31日 2023年7月30日 2023年7月29日 2023年7月28日 2023年7月27日 2023年7月26日 2023年7月25日 2023年7月24日 2023年7月23日 2023年7月22日 2023年7月21日 2023年7月20日 2023年7月19日 2023年7月18日 2023年7月17日 2023年7月16日 2023年7月15日 2023年7月14日 2023年7月13日 2023年7月12日 2023年7月11日 2023年7月10日 2023年7月9日 2023年7月8日 2023年7月7日 2023年7月6日 2023年7月5日 2023年7月4日 2023年7月3日 2023年7月2日 2023年7月1日 2023年6月30日 2023年6月29日 2023年6月28日 2023年6月27日 2023年6月26日 2023年6月25日 2023年6月24日 2023年6月23日 2023年6月22日
Windows 126 95 94 96 107 96 107 98 113 75 94 110 110 141 109 110 81 85 107 109 123 116 111 62 102 119 135 121 142 91 83 73 92 114 142 98 108 75 113 116 114 101 118 109 83 83
Mac 34 26 22 15 37 39 36 33 32 17 36 31 46 40 37 42 24 18 36 42 40 41 33 24 23 25 26 47 47 30 15 30 52 43 29 27 27 19 14 24 32 37 32 24 29 29
Linux 32 45 33 35 39 37 35 39 47 36 36 52 42 54 52 30 25 44 40 42 49 41 44 42 35 50 46 37 47 30 25 34 34 34 39 33 44 41 31 46 37 50 47 38 39 35

说明

源代码
raw.​githubusercontent.​com

将真实终端带给 Sublime Text

Sublime Text 的首个跨平台终端。

Unix shell Cmd.exe
面板中的终端 支持 显示图片

本插件深受 TerminalView 启发。与 TerminalView 相比,本插件有:

  • Windows 支持
  • 持续历史记录
  • 易于自定义的主题(可查阅 Terminus 工具)
  • Unicode 支持
  • 256色支持
  • 更好的 xterm 支持
  • 终端面板
  • imgcat 支持(PS:Linux / WSL 也能使用)

安装

Package Control.

开始使用

shell 配置

Terminus 包含多种 shell 配置。设置文件应该相当直观。

用户快捷键

你可能觉得以下快捷键很有用。要编辑,请运行 首选项: Terminus 快捷键。以下是 terminus_open 参数的详细信息。

  • 切换终端面板
[
    { 
        "keys": ["alt+`"], "command": "toggle_terminus_panel"
    }
]
  • 在当前文件目录打开终端视图
[
    { 
        "keys": ["ctrl+alt+t"], "command": "terminus_open", "args": {
            "cwd": "${file_path:${folder}}"
        }
    }
]

或通过传递一个自定义 cmd,例如 ipython

[
    { 
        "keys": ["ctrl+alt+t"], "command": "terminus_open", "args": {
            "cmd": "ipython",
            "cwd": "${file_path:${folder}}"
        }
    }
]
  • 使用 Origamicarry_file_to_pane 在分视图中打开终端
[
    {
        "keys": ["ctrl+alt+t"],
        "command": "terminus_open",
        "args": {
            "post_window_hooks": [
                ["carry_file_to_pane", {"direction": "down"}]
            ]
        }
    }
]
  • ctrl-w 关闭终端

如果想要使用 ctrl+w 关闭终端,以下快捷键可以考虑。

{ 
    "keys": ["ctrl+w"], "command": "terminus_close", "context": [{ "key": "terminus_view"}]
}

调色板中的用户命令

  • 运行 首选项: Terminus 命令调色板。以下是 terminus_open 参数的详细信息
[
    {
        "caption": "Terminus: Open Default Shell at Current Location",
        "command": "terminus_open",
        "args"   : {
            "cwd": "${file_path:${folder}}"
        }
    }
]

或通过传递一个自定义 cmd,例如 ipython

[
    {
        "caption": "Terminus: Open iPython",
        "command": "terminus_open",
        "args"   : {
            "cmd": "ipython",
            "cwd": "${file_path:${folder}}",
            "title": "iPython"
        }
    }
]
  • 使用Origamicarry_file_to_pane功能在分屏中打开终端
[
    {
        "caption": "Terminus: Open Default Shell in Split Tab",
        "command": "terminus_open",
        "args": {
            "post_window_hooks": [
                ["carry_file_to_pane", {"direction": "down"}]
            ]
        }
    }
]

Terminus构建系统

可以将Terminus用作构建系统。目标terminus_exec是默认目标exec的直接替代品。它接受与terminus_open相同的参数,但默认值设置不同。

terminus_cancel_build在用户通过ctrl+c(macOS)或ctrl+break(Windows/Linux)触发cancel_build时用于取消构建。

以下是在项目设置中定义的构建系统示例,它将运行Python脚本

{
    "build_systems":
    [
        {
            "name": "Hello World",
            "target": "terminus_exec",
            "cancel": "terminus_cancel_build",
            "cmd": [
                "python", "helloworld.py"
            ],
            "working_dir": "$folder"
        }
    ]
}

相同的Hello World示例可以通过一个.sublime-build文件指定。

{
    "target": "terminus_exec",
    "cancel": "terminus_cancel_build",
    "cmd": [
        "python", "helloworld.py"
    ],
    "working_dir": "$folder"
}

用户也可以指定shell_cmd而不是cmd。在macOS和Linux中,将调用bash壳;在Windows中,将调用cmd.exe。

{
    "target": "terminus_exec",
    "cancel": "terminus_cancel_build",
    "shell_cmd": "python helloworld.py",
    // to directly invoke bash command
    // "shell_cmd": "echo helloworld",
    "working_dir": "$folder"
}

Alt-Left/Right在单词间切换(Unix)

  • Bash:在.bash_profile.bashrc中添加以下内容

    if [ "$TERM_PROGRAM" == "Terminus-Sublime" ]; then
        bind '"\e[1;3C": forward-word'
        bind '"\e[1;3D": backward-word'
    fi
    
  • Zsh:在.zshrc中添加以下内容

    if [ "$TERM_PROGRAM" = "Terminus-Sublime" ]; then
        bindkey "\e[1;3C" forward-word
        bindkey "\e[1;3D" backward-word
    fi
    

一些程序,例如julia,不识别alt+leftalt+right的标准键码。您可以分别将它们绑定到alt+balt+f,“json [ { "keys": [“alt+left”], “command”: “terminus_keypress”, “args”: {“key”: “b”, “alt”: true}, “context”: [{“key”: “terminus_view”}] }, { “keys”: [“alt+right”], “command”: “terminus_keypress”, “args”: {“key”: “f”, “alt”: true}, “context”: [{“key”: “terminus_view”}] } ]

## Terminus API

- A terminal could be opened using the command `terminus_open` with

```py
window.run_command(
    "terminus_open", {
        "config_name": None,     # the shell config name, use `None` for the default config
        "cmd": None,             # the cmd to execute
        "shell_cmd": None,       # a script to execute in a shell
                                 # bash on Unix and cmd.exe on Windows
        "cwd": None,             # the working directory
        "working_dir": None,     # alias of "cwd"
        "env": {},               # extra environmental variables
        "title": None,           # title of the view, let terminal configures it if leave empty
        "panel_name": None,      # the name of the panel if terminal should be opened in panel
        "focus": True,           # focus to the panel
        "tag": None,             # a tag to identify the terminal
        "file_regex": None       # the `file_regex` pattern in sublime build system
                                 # see https://text.sublime.net.cn/docs/3/build_systems.html
        "line_regex": None       # the `file_regex` pattern in sublime build system
        "pre_window_hooks": [],  # a list of window hooks before opening terminal
        "post_window_hooks": [], # a list of window hooks after opening terminal
        "post_view_hooks": [],   # a list of view hooks after opening terminal
        "auto_close": "always",  # auto close terminal, possible values are "always" (True), "on_success", and False.
        "cancellable": False,    # allow `cancel_build` command to terminate process, only relevent to panels
        "timeit": False          # display elapsed time when the process terminates
    }
)

字段cmdcwd理解Sublime Text构建系统变量

  • 设置view.settings().get("terminus_view.tag")可以用来识别终端

  • 可以将快捷键绑定到带有特定标签的终端

{
        "keys": ["ctrl+alt+w"], "command": "terminus_close", "context": [
            { "key": "terminus_view.tag", "operator": "equal", "operand": "YOUR_TAG"}
        ]
    }
  • 可以使用以下方式将文本发送到终端
window.run_command(
    "terminus_send_string", 
    {
        "string": "ls\n",
        "tag": "<YOUR_TAG>"        # ignore this or set it to None to send text to the first terminal found
        "visible_only": False      # send to visible terminal only, default is `False`. Only relevent when `tag` is None
    }
)

如果未提供tag或为None,则文本将发送到当前窗口中找到的第一个终端。

常见问题解答

内存问题

已知Terminus在长期使用后有时会消耗大量内存。这是因为Sublime Text保留了一个无限撤销堆栈。除非上游提供用于与撤销堆栈工作的API,否则实际上没有任何修复方法。同时,用户可以执行Terminus: Reset以释放内存。

这个问题已经解决,在Sublime Text >= 4114和Terminus v0.3.20中。

最大化或最小化终端时的颜色问题

已知当将终端从或到面板最大化或最小化时,滚动历史记录的颜色将会丢失。这个问题没有修复方法。

终端面板背景问题

如果您使用DA UI且终端面板具有奇怪的颜色,请尝试在DA UI: Theme Settings中调整设置panel_background_colorpanel_text_output_background_color

{
    "panel_background_color": "$background_color"
}

或者,为了保持查找和替换面板保持不变:“json "panel_text_output_background_color”: “$background_color”

### Cmd.exe rendering issue in panel

Due to a upstream bug (may winpty or cmd.exe?), there may be arbitrary empty lines inserted between prompts if the panel is too short. It seems that cmder and powershell are not affected by this bug.


### Acknowledgments

This package won't be possible without [pyte](https://github.com/selectel/pyte), [pywinpty](https://github.com/spyder-ide/pywinpty) and [ptyprocess](https://github.com/pexpect/ptyprocess).