Terminus
将真实终端带给 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 |
说明
将真实终端带给 Sublime Text
Sublime Text 的首个跨平台终端。
Unix shell | Cmd.exe |
---|---|
面板中的终端 | 支持 显示图片 |
本插件深受 TerminalView 启发。与 TerminalView 相比,本插件有:
- Windows 支持
- 持续历史记录
- 易于自定义的主题(可查阅 Terminus 工具)
- Unicode 支持
- 256色支持
- 更好的 xterm 支持
- 终端面板
- imgcat 支持(PS:Linux / WSL 也能使用)
安装
Package Control.
开始使用
运行
Terminus: 在标签中打开默认 shell
OdatNurd 对 Terminus 制作了一些视频教程。例如,请参考:
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}}"
}
}
]
- 使用 Origami 的
carry_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"
}
}
]
- 使用Origami的
carry_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+left
和alt+right
的标准键码。您可以分别将它们绑定到alt+b
和alt+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
}
)
字段cmd
和cwd
理解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_color
或panel_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).