命令行指emacs之外, 普通终端(比如xterm)中的命令行, shell比如bash, zsh等.
平时用命令行,经常会用到很多很类似的命令,里面大部分内容都一样,只有个别一两个参数不一样,比如scp,ssh等,有没有工具像yasnippet一样,但是运行在交互的shell里?可以在输入命令行的时候展开,输入完成后执行命令
命令行指emacs之外, 普通终端(比如xterm)中的命令行, shell比如bash, zsh等.
平时用命令行,经常会用到很多很类似的命令,里面大部分内容都一样,只有个别一两个参数不一样,比如scp,ssh等,有没有工具像yasnippet一样,但是运行在交互的shell里?可以在输入命令行的时候展开,输入完成后执行命令
可以试下abbrev mode。定义自己的abbrev,比如d-> date
输入d后,敲空格或者其它标点时,就直接扩展成date。
你的常用命令都可以定义为abbrev。
那么问题来了,如果我就是想在d后输入一个空格呢?答案是用C-q。即d后先按C-q,再按空格就不会扩展了。
这个应该网上有很多教程。可以参考一下xah的 Xah Lee on Abbrev Mode
你是说在emacs(eshell)里面吗? 我不怎么用eshell, 我说的是普通shell, 比如bash, zsh等.
abbrev跟snippet还离得比较远, 比如scp:
scp file_names.xxx [email protected]:/tmp/
常常要修改的是file_names.xxx这一部分, snippet很容易实现, abbrev怎么实现?
shell里面我不太清楚了。不过,zsh有一个插件,我感觉还是比较好用的。zsh-autosuggestions 。比如你刚输入过
scp file_names.xxx [email protected]:/tmp/
后,再敲scp,马上就会提示你上次的scp开头的命令,这时按一下<right>
,就补全成你上次敲的命令了。这样你就只需要把xxx改一下就可以了。不知道这个和对你有没有帮助。
这个的话,abbrev弄起来麻烦一点。我理解abbrev就是最简单的扩展吧,主要还是让人少敲。不过这样看起来,可能上面的zsh-autosuggestions要更能满足你的需求一点。
emacs里还是外? 里的话,自己定义snippet
最近也需要这个实现,但是搜索了好久也只搜索到了knqyf263/pet,如果你能实现可以参考:
其实吧,用snippet不如在rc文件里写几个function
In POSIX style shell, everthing is string.
bash或zsh内置的搜索历史功能也很好用, 可根据输入内容, 搜索该内容开头的命令历史, 不过还是不如snippet方便
外, 已更新问题
有点接近, 不过体验看上去不太好
推荐你用 percol,然后把 shell 的 history size 调整大一些 再复杂的就用 emacs
这种非跨平台的不敢用, 平时用linux和macos, 不跨平台的习惯了, 切换到其他系统很不方便, 总感觉少点什么
还行。不过启动稍麻烦 pet exec snippet_name
。
用 alias 缩短一点: pe snippet_name
。如果用的是 zsh / fish,还可以定义快捷键启动:<shortcut> snippet_pattern
。比起 Emacs 中 snippet_name<TAB>
已经差不多了。
另一个问题就是光标在 field 里面只能方向键移动,不支持常规的 unix 快捷键。可以去提 ISSUE。
终端里可以打开 Emacs 来编辑命令行,如 Bash 中按 C-x C-e,然后用 YASnippet 写命令。
Zsh 需要设置一下,有趣的是 Zsh 也有一个 M-x,除了绑定按键也可以 M-x edit-command-line
: