2013年8月11日星期日

我的zsh简单设置 - 巴蛮子

bash用久了,有些地方开始觉得不爽,于是想看看有没有更好的选择。原来在网上瞎逛时,已经很多次看到有人推荐zsh了,加上zsh高度兼容bash,于是就来折腾这个。
不过试验了一下oh-my-zsh,感觉功能太强大了,太多东西不知道怎么配置的,这种过于“不知其所以然”的感觉我不太喜欢。于是自己来折腾,觉得基本够自己用就行了。

1. 补全

很多介绍zsh的文章都说zsh相对bash的一个优点是支持命令选项和参数的补全




(这两幅图来自 Z使用 Zsh 的九个理由 - 博客 - 伯乐在线)

其实bash里面如果你安装了bash-completion这个包的话,很多命令(比如pkill, dpkg, git等等,我的机器上/etc/bash_completion.d/下面有200多个命令的补全配置。注意/etc/bash_completion.d/git其实是git包提供的,而/etc/bash_completion.d/mercurial其实是mercurial包提供的) 。

不过zsh在补全还是有些比bash强的地方,尤其是涉及到交互的地方:

  1. 按TAB补全时,能够在多个备选项之间循环,如果备选项不多的话,你只需要不断按TAB就行了,而bash只会列出备选项,你得多输入一个或几个字母直到备选项缩小到一个了它才真正给你补全;
  2. 有一定的容错能力: 可以在配置文件中添加一句 zstyle ':completion::approximate:' max-errors 1 numeric ,以后输入cd /etc/x11, 按TAB后zsh会给你纠正为/etc/X11 (此条来自 终极Shell——Zsh — LinuxTOY,那里有详细的说明);
  3. 补全时可以用光标键或者Ctrl-p/Ctrl-n来挑选被选项(即很多文章说到的menu select方式)。不过针对第这一点,就得说到zsh的两个缺点:配置太TMD复杂、说明文档也巨罗嗦,你要是对缺省配置有一点点不满意,或者搞错了,就很容易陷入泥沼里,有兴趣的自己研究这个文档吧: Chapter 6: Completion, old and new - A User's Guide to the Z-Shell (P.S. 一篇简单的介绍: Refining Linux: ZSH Gem #5: Menu selection )

另外,zsh自带的补全源的确比bash-completion多,我这里find /usr/share/zsh/functions/Completion -type f | wc -l 的结果是688个文件(参见 Debian -- Filelist of package zsh-common/jessie/all )

2. 在目录中穿梭(cd命令)

在写代码过程中,会在各个目录之间来回切换,原来用bash时有两点最不爽:

  • 对cd命令有TAB补全的功能,但每一级目录都需要按TAB(并且有多个备选项的话需要继续输入才行)还是觉得繁琐,觉得效率不高;
  • pushd/popd/dirs虽然很有用,但很多时候等你想回到过去的某个目录时,才发现当时忘记pushd了

2.1 zsh的改进方法

  • 首先,假如/opt/rubystack-1.9/下面有apache2apps这两个目录,输入cd /opt/rubystack-1.9/a然后按TAB的话,首先会补齐为apache2,再按TAB会补齐为apps,不需要象bash下面那样继续输入字母;
  • 如果你想进入/opt/rubystack-1.9/apps/redmine,那么可以先这样输入 cd /o/r/a/r 然后按TAB,如果这是唯一匹配,那么zsh会补全为/opt/rubystack-1.9/apps/redmine,但如果还存在一个/opt/rubystack-1.8/apps/redmine,那zsh就会列出来让你挑选;
  • 如果你现在在/opt/rubystack-1.9/apps/redmine,但你想进入/opt/rubystack-1.8/apps/redmine,可以这样: cd 1.9 1.8 这表示将完整路径上的1.9替换为1.8再使用;
  • 你可以打开auto_pushd选项(通过命令setopt auto_pushd),这样你通过cd切换目录时,zsh会自动将前一个目录加到栈里,这样你就不会因为忘记pushd而遗憾了;
  • bash里面可以cd -回到上一个目录(即最后一次调用cd时所在的目录),但zsh里面有cd -2, cd +3这样的用法,并且在输入cd -之后按TAB能够列出目录名供挑选补全。不过需要注意的是,这里-2并不表示倒数第二次调用cd时的目录,而是倒数第二次通过pushd记录的目录,如果打开了auto_pushd选项,那么这两个的含义倒是一样的;
  • zsh里面将~这个符号的用法进行了扩展,我们可以用hash -d www=/var/www/html定义一个路径别名,然后用cd ~www就可以进入到/var/www/html

参考资料: Refining Linux: ZSH Gem #20: Changing directories the pro's way

2.2 autojump: 快速进入频繁访问的目录(bash/zsh通用)

使用方法

  1. 下载这个 https://github.com/rupa/z/blob/master/z.sh (这个文件名跟zsh没有必然联系),放到某个位置(比如/usr/local/lib/z.sh);
  2. ~/.bashrc或者~/.zshrc里面加入一句source /usr/local/lib/z.sh,这使得以后的cd命令会被z.sh统计各目录访问频率;
  3. 你得按老方法切换目录一阵,以便z.sh能够知道哪些目录是最常用的;
  4. z -l命令即可列出历史上你访问各个目录的频率了;
  5. z regex 命令即可进入你频繁访问的目录

3. 提示符设置

oh-my-zsh提供了很多很花哨且功能强大的提示符设置,比如显示git当前分支名、提交状态等等:

3.1 基本设置

不过我觉得Debian缺省推荐的(见/etc/zsh/newuser.zshrc.recommended )提示符设置就可以了(只是简单地显示用户名、机器名和全路径)

autoload -Uz promptinit
promptinit
prompt adam1

3.2 RPROMPT

不过我有时也想显示一点别的内容,zsh有个RPROMPT环境变量用来设置显示在右边的提示符,可以在有需要的时候即设即用,很方便。比如我用它配置了 用来显示当前git仓库名、分支名和提交状态(也许你又要问我为什么不用oh-my-zsh,那是因为我没看见它显示git仓库名,而这个庞大的东西我不 知道怎么去修改它。甚至下面这段代码我也是抛弃了StackOverflow上得票最多的答案,而是选了个得分为0的答案为基础,仅仅因为后面这个我能看懂,能修改它)

_git_repo_name() {
gittopdir=$(git rev-parse --git-dir 2> /dev/null)
if [[ "foo$gittopdir" == "foo.git" ]]; then
echo `basename $(pwd)`
elif [[ "foo$gittopdir" != "foo" ]]; then
echo `dirname $gittopdir | xargs basename`
fi
}
_git_branch_name() {
git branch 2>/dev/null | awk '/^\*/ { print $2 }'
}
_git_is_dirty() {
git diff --quiet 2> /dev/null || echo '*'
}

setopt prompt_subst
RPROMPT='$(_git_repo_name) $(_git_branch_name) $(_git_is_dirty)'

4. 命令历史

4.1 多会话共享历史

我一般会用tmux开多个会话,这种情况下记得刚才输入过这个命令,但找了半天没找到才意识到好像是在另外一个window/pane里面输入的。zsh的一个功能特性是share_history,这样在一个会话里面可以访问另外一个会话的历史命令了。不过这个特性可能会让人有些不习惯,这样的话可以试试另外两个选项:setopt APPEND_HISTORY或者setopt INC_APPEND_HISTORY.

参考资料: Refining Linux: ZSH Gem #15: Shared history

4.2 a clear history

setopt hist_ignore_space
alias cd=" cd"
alias ls=" ls"

第一句使得不将以空格开始的命令行记录到历史当中(这在需要在i命令行中明文输入密码时也挺有用,这样不会在历史记录中看到你的密码了);
后面两句使得cd/ls这些简单的命令就不记录到历史了,这样用history查看的时候是不是更清晰了?

来自 : http://chneukirchen.org/blog/archive/2012/02/10-new-zsh-tricks-you-may-not-know.html

另一个技巧: 每个目录记录自己的history: <http://linuxtoy.org/archives/zsh_per_dir_hist.html>

http://www.lowlevelmanager.com/2012/05/zsh-history-expansion.html

5. 其它设置

5.1 通配符带子目录

zsh支持更复杂的文件名匹配,不过我大部分我都没去学,只记住了我认为最有用的一个:

grep ":project_menu" **/*.erb

这个**会搜索所有的子目录,也就避免了用find了(bash下就得借用find了: find . -name '*.erb | xargs grep ":project_menu")

5.2 setopt no_nomatch

这是zsh缺省跟bash不兼容的一个地方。在zsh下,如果你执行dpkg -l firefox*,很可能zsh不会列出名字以firefox开头的包,而是告诉你zsh: no matches found: firefox*。这是因为zsh缺省情况下始终自己解释这个firefox*,而不会传递给dpkg来解释。

解决这个问题的方法是在~/.zshrc中加入:

setopt no_nomatch

5.3 ~/.inputrc无法工作?

zsh没有使用libreadline,而是自己实现了一套类似的(名字叫做zle - zsh command line editor)。所以你原来在~/.inputrc里面配置的快捷键都不再有效,而是要用zle的语法重新配置一遍(也在~/.zshrc中配置)。

例子1:

bindkey "^[0H" beginning-of-line
bindkey "^[OF" end-of-line

例子2:

#按下F5时自动输入z -l | tail\n
bindkey -s "\e[15~" "z -l | tail\n"

5.4 让M-backspace象bash那样只回删一个单词

这是zsh跟bash不兼容的另一个地方,M-backspace会回删整个参数,而不是像bash/emacs那样只删除一个单词。

解决方法是在~/.zshrc中加入:

autoload -U select-word-style
select-word-style bash

(来自: http://stackoverflow.com/a/1438523 )

 

6. 参考资料

- [系统管理员工具包: 充分利用 zsh](http://www.ibm.com/developerworks/cn/aix/library/au-satzsh.html)
- [幕启:介绍 Z shell](http://www.ibm.com/developerworks/cn/linux/shell/z/)
- [终极Shell——Zsh — LinuxTOY](http://linuxtoy.org/archives/zsh.html)
- [使用 Zsh 的九个理由 - 博客 - 伯乐在线](http://blog.jobbole.com/28829/)


本文链接:http://www.cnblogs.com/bamanzi/p/zsh-simple-guide.html,转载请注明。



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/p/zsh-simple-guide.html)

2013年5月5日星期日

MobaXterm: SSH/X远程客户端, Xmanager的最佳免费替代品

当需要连接远程linux并运行X程序时,很多朋友首先想到的是NetSarang Xmanager, 虽然这个工具的确很好用,不过这个软件不是免费的,所以银子不多的人得另外想办法。(BTW: 有银子的还可以看看X-Win32, 甚至更老牌的eXceed或者Reflection X

其实我一直在用的是Cygwin/X,因为Cygwin提供了几乎所有的东西,从bash到终端模拟器rxvt/mintty,有openssh客户端甚至服务器,有X server和窗口管理器WindowMaker/Openbox/Metacity/Xfwm4(后两者在第三方仓库Cygwin Ports里,甚至有ibus输入法(也在Cygwin Ports里)。不过Cygwin有几个缺点 1)Cygwin一直没有类似Debian stable那样定期发布的配套,所有软件包都在不断地更新,有时你为了加装一个软件不得不更新很多很多其它的包,甚至是不相关的包; 2)所有东西都隐藏在命令行和配置文件中,对新手相当不友好; 3)小文件很多,想搞成便携式或者想共享给别人使用就非常困难。

 

Xming/VCXsrv

Xming算是个不错的选择,基于X.org X server编译,体积并不大(并不包含别的东西),另外带了一个向导界面(XLaunch)。

xming wizard


但这个软件有两个小问题,
1)新版本不是免费的(虽然作者要求的是捐赠而不是购买,但不捐赠而无法下载到版本),免费下载只有一个07年的6.9版本。当然,考虑到X server的发展史,很多时候这个老版本也基本上够用

(更新:如果你需要最新版的X.org X server, 可以试试这个VcXsrv项目,跟Xming几乎是一致的,同样带有Xming的向导XLaunch)

2)它只提供了X server,而没有提供终端模拟器(putty),你只能启动一个远程的X终端模拟器(rxvt/xterm/gnome-terminal/konsole之类),但没连上之间,你怎么知道远程有什么终端模拟器可用?——当然,你可以自己下载putty然后配置X11 forwarding,但对新手这可能有点难度

(更新:Xming其实现在也提供一个叫做Xming-portablePutty的包,不过也不是免费的)

结论:比较适合老手,便携/共享场景也还凑合。

 

MobaXterm

MobaXterm比较适合新手和便携/共享场景。

mobaxterm screenshot


便携/共享场景

1. 整个应用就一个文件(14M),里面包含了bash和众多posix小工具(其实都是busybox)、openssh、X server, 其实它是基于Cygwin打包而成,启动时自动解压到临时目录,不过启动速度还是挺快)
2. 提供gcc, perl, python, svn, git, emacs, vim等20多个插件,每个插件也都是一个单一文件,携带/共享很方便(其实插件是一个zip文件, 对Cygwin比较了解的人很容易自己制作插件)
3. 自动导入putty的所有会话设置

新手友好性
1. 为ssh/rsh/xdmcp等提供新建会话对话框,里面对常用参数都提供了文字说明;
2. 启动时自动启动X server,自动为ssh连接设置X11 forwarding;
3. 左测栏提供一个sftp面版,在建立ssh连接后自动将远程目录展示再这个面版中,方便上传/下载文件;
4. 为ssh tunnel提供向导界面 (Tools->MobaSSHTunnel);
5. 通过右键菜单即可放大/缩小字体,也支持设置缺省字体大小(而putty需要在选项对话框中找,并且不支持缺省大小,只能逐个修改多个会话的设置);

功能强大mobaxterm sessions
1. 支持建立ssh/telnet/rsh/ftp/sftp/serial/vnc/xdmcp/rdp等多种远程会话,其中xdmcp/vnc可以用于访问远程桌面。也支持本地bash或者cmd;
2. 自带了ftp/tftp/http服务器(不过免费版有时间限制);
3. 支持对终端模拟器上的文字进行查找(其实它是整屏文字拷贝出来再进行查找)
4. 麻雀虽小,但还带了几个游戏、目录比较器/文本比较器、计算器、文本编辑器(支持语法高亮)、网络抓包工具等

 

其它一些小亮点

* 支持录制和回放键盘宏
* 支持同时往多个终端发同一命令
* 支持多终端分屏显示,支持全屏,
* 支持自定义本地的HOME目录,这样vi, git等配置可以存放在该目录
* 支持将终端上的文字复制/保存为RTF(保持原色彩,比如vim/emacs里面的语法高亮, colorgcc突出显示的错误行等等)

 

MobaXterm的缺点

总体还是比较满意的,只有几个小地方不太爽:

1. 终端模拟器对键盘的支持度不高,最大的问题是不支持Alt键作为Meta键,导致很多程序里面会不习惯(比如vi, mc, emacs),不过用AutoHotKey可以解决;
2. 终端颜色有点古怪,反正我打开vi/mc,跟在其它地方看到的颜色很不一样,并且颜色搭配不太和谐,不容易看清文字;
3. 少数缺省快捷键不太合理,比如Ctrl+F, Ctrl+S 都是终端里比较常用的快捷键,不过可以在对话框里面修改;
4. 没有man这个工具,实际上/bin里面倒是有个man,但内容是mobaxterm自己写的一段shell脚本,只能显示nroff格式化之后的帮助文件(基本上可直接阅读的纯文本文件),而不能支持原始的man page(它自己提供的插件里面都是转化后的文档),比如man git-log可以显示帮助,而git log --help就什么也没有了——当然,也可以自己从cygwin里面将man, groff, less这几个包抽出来作一个插件来解决;

 

参考资料:

 

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2013/05/05/mobaxterm-ssh-xserver.html)

2013年4月30日星期二

[Firefox扩展] TableTools2: 对网页上的表格提供排序、过滤、图表分析等功能

最近发现一个很不错的Firefox扩展,分享给大家。跟以往分享那些不同,这个扩展具有真正的“实用价值” :-)

tabletools2 logo TableTools2 - Copy/Sort/Chart/Filter Table & More! 1.17

by Mingyi Liu

Does everything for HTML tables: Copy (table/row/column/cell), Sort (multi-column), Search (regex, range operations ...), Filter, Chart (bubble, line, pie, histogram ...), Statistics, Rearrange (column/row), Combine & Compare. Replaces TableTools.

这个扩展的功能是可以对网页上的表格提供排序、过滤甚至图表分析等功能,这样你就不用将表格拷贝到Excel/LibreCalc里面来分析了。如果你是在你们公司内的一个Web应用上查看某个表格,也不用等开发人员慢慢研究ExtJS来提供筛选、过滤功能了。

举个例子,我想看看melpa上提供的emacs 包有哪些是最热门的,虽然它对这900多个包都给出了下载量,但i一个个地看那些下载量在2000或者1000以上的包可有点累,有了TableTools2我就轻松了,只需要按下载量排序一下就可以了,或者启用过滤功能并在下载量那一列的过滤框中输入">1000"。

基本用法

  • 排序(除了文本,还支持数字、时间、IP地址、货币等格式的排序,可指定参与排序的开始行和结束行)

tabletools2 sort

  • 过滤(从下面的例子可以看出,除了基本的子字符串匹配,也支持正则表达式,甚至支持表达式,比如">1000" 甚至">=3 & <= 5"或者“>=01/01/1990 & <01/01/2000”。可指定参与过滤的开始行和结束行)

tabletools2 filter

  • 隐藏某列
  • 拷贝选中行、选中列或者所选单元格的数据到剪贴板,这在你只需要部分数据时很有用
  • 可上下移动行和列(按住Ctrl键后用右键拖动。如果想i移动行,必须在行首操作)

高级用法

  • 用表格数据生成分析图,支持饼图、柱状图、折线图、散点图等类型

tabletools2 charting

  • 合并多页或者页内多个表格的数据
  • 还有其它一些功能,自己研究一下吧—其实我基本上还是用那些“基本功能”

下载地址: TableTools2 - Copy/Sort/Chart/Filter Table&More! :: Firefox 附加组件

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2013/04/30/firefox-extension-tabletools2.html)

2013年4月15日星期一

clink: 让Windows Cmd拥有readline能力

用惯了Linux下的bash,在Windows下对于那个cmd.exe很恼火,且不说双引号区分参数这样的“高级”问题,就是调个历史命令都麻烦得很,命令行编辑能力相当弱。

最近发现了clink这个扩展,可以让cmd.exe拥有几乎readline的全部能力。

clink: Bringing Bash's powerful command line editing to Microsoft Windows' cmd.exe

http://code.google.com/p/clink/

  • Powerful Bash-like line editing from GNU's Readline library. Read more on Readline's keyboard shortcuts.
  • Superior path completion (TAB).
  • Paste from clipboard (Ctrl-V).
  • Support for the completion of executables/commands, and environment variables.
  • Undo/Redo (Ctrl-_ or Ctrl-X, Ctrl-U)
  • Improved command line history.
    • Persists across sessions.
    • Searchable (Ctrl-R and Ctrl-S).
    • History expansion (e.g. !!, !<string>, and !$).
  • Scriptable completion using Lua.

 

跟随cmd自动启动clink

clink的安装程序带有“Autorun when cmd.exe starts"选项,但如果你不想使用安装程序,又想要在启动cmd时自动启动clink,可以按如下办法:

  1. 打开注册表编辑器,找到(或者新建)HKEY_CURRENT_USER\Software\Microsoft\Command Processor
  2. 在该键下新建一个字符串项,名为AutoRun
  3. 将AutoRun的值设置为一个bat文件的路径,比如d:\cmdstart.cmd
  4. 编辑d:\cmdstart.cmd,里面写一句 d:\tools\clink /inject (当然你也可以再添加其他命令)

 

 

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2013/04/15/clink-windows-cmd-readline.html)

2013年2月17日星期日

终端下如何让Emacs用上Ctrl+F1, Shift+Up等组合键

最近常用Putty访问Linux,在上面用Emacs修改代码、运行shell、进行SQL交互,最大的问题是很多组合键(比如我常用的Shift+Up/Down/Left/Right, Ctrl+F1..F12, Ctrl+Home/End)不能使用,春节前两天有些时间,研究了一下这个问题,算是基本找到了一些解决办法。

问题分析

首先需要了解Xterm control sequences这个概念,这个链接中的说明很晦涩,我简单地说明一下:对于有对应 ASCII字符的组合健,就发送对应的ASCII字符,否则用一个特殊序列来表示,比 如 F1 就用 ^[OP (也就是先按Ctrl+[, 然后按O,然后再按P),或者用 ^[[11~ 来表示, C-F7 就用 ^[[18;5~ 表示 。这个序列一般都是以 ESC(也即ASCII码中的27,对应实际按键 ESC 或者 Ctrl+[ ,常写为 \e 或者 ^[ )开始,所以也常常叫做Escape sequences(除了表达按键之外,它还用来表达终端颜色控制)。

当在终端里运行应用程序时,按下一个组合键之后的事情是这样:

  1. 终端模拟器将其翻译为对应的Xterm control sequences,发送给对端主机;
  2. 对端主机根据 TERM 在terminfo中查找翻译表,翻译为对应的按键信息,传递给应用程序(如果某些组合键在翻译表中找不到,则透传)
  3. 应用程序对组合健做出响应。

所以可能存在的问题是:

  1. 终端模拟器不能将某些组合键翻译为Xterm control sequences
  2. 终端模拟器与terminfo中的翻译表不一致

对于第一个问题

可以用AutoHotKey拦截组合键,自行翻译到control sequences发送出去:

#if WinActive("ahk_class PuTTY") or WinActive("ahk_class mintty")
;;** Ctrl+Fn
^F1::SendInput {ESC}[1;5P
^F2::SendInput {ESC}[1;5Q
^F3::SendInput {ESC}[1;5R
^F4::SendInput {ESC}[1;5S
^F5::SendInput {Esc}[15;5~
^F6::SendInput {Esc}[17;5~

(完整的代码见这里: bamanzi / misc-utils / source / autohotkey / putty-ctlseqs.ahk — Bitbucket)

备注一下,我的办公用机是Windows,我用的终端模拟器是putty及其变种 (包括mintty, putty-nd以及MobaXterm)。至于Linux桌面,GNOME Terminal和XFCE Terminal兼容vt102和vt220的组合键,Ctrl+Up, Alt+F1这些大都是支持的(但有少数不支持,但我目前不知道什么工具可以完成类似AutoHotKey这样的功能)

对于第二个问题

对于Emacs而言,我们并不需要直接去解决第二个问题,因为Emacs可以自己将control sequences翻译为其它按键:

(define-key input-decode-map "\eO5P" [C-f1])
(define-key input-decode-map "\eO5Q" [C-f2])
(define-key input-decode-map "\eO5R" [C-f3])
(define-key input-decode-map "\eO5S" [C-f4])
(define-key input-decode-map "\e[15;5~" [C-f5])
(define-key input-decode-map "\e[17;5~" [C-f6])

这里有一个比较完整的包,包含了很多control sequences: http://www.dur.ac.uk/p.j.heslin/Software/Emacs/Download/xterm-extras.el )

补充说明

  • 对于同一个键,可能有多种control sequences,比如F1有^[11~ , ^[[1P^[OP 这三种序列,你使用的终端模拟器只发送其中一种。上面的xterm-extra.el对光标键提供了CSI和SS3序列的映射,但对于F1..F4只提供了CSI的序列映射,没有提供SS3序列映射(Putty/Mintty对于F1..F4使用CSI序列)。不过反过来比较好的是,不会一个序列对应多种按键。
  • 获取你的终端上某个键的control sequences的简单方法是用cat命令(不过对于少数特殊键和application keypad不好使)

  • 上面的xterm-extra.el里面对keypad序列似乎不是标准的,我没有查到^[z开头的序列,似乎是作者利用了一个尚未使用的序列。不过SS3序列中是有keypad序列的(vim wiki中有一篇相关的贴士: PuTTY numeric keypad mappings - Vim Tips Wiki;
  • Putty本身对于F1, Shift+F1, Alt+F1, Alt+Shift+F1, 支持挺好,但不支持带Ctrl修饰键的(比如Ctrl+F1, Ctrl+Shift+F1, Ctrl+Alt+F1),如果是Windows平台,可以用AutoHotKey来解决;
  • 对于Ctrl+标点这个列表,部分(比如Ctrl+*, Ctrl+.等)是有control sequences定义的,还有一些(比如Ctrl+!, Ctrl+#, Ctrl+; )则没有正式的control sequences。详细说明可以参考我的配置文件里面的说明: init.d / 80-ports.el。如果要使用,也只能用AutoHotKey来解决

 

简单地表达一下就是:对于有对应ASCII字符的组合健,就发送对应的ASCII字符,否则用一个特殊序列来表示,比如 F1 就用 ^[OP (也就是先按Ctrl+[, 然后按O,然后再按P),或者用^[[11~ 来表示, C-F7 就用 ^[[18;5~ 表示 。这个序列一般都是以ESC(也即ASCII码中的27,对应实际按键 ESC 或者 Ctrl+[ ,常写为 \e或者 ^[ )开始,所以也常常叫做Escape sequences(除了表达按键之外,它还用来表达终端颜色控制)。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2013/02/17/xterm-ctlseqs-and-emacs.html)