注册表可能与前几项东西在完全不沾边. 但实际上有关系.
为了避免反复的下载, 安装cygwin, 尤其是你装一台电脑之后, 我把自己长期调教好的cygwin环境简单压缩为一个文件, 到别的电脑上一个简单的解压就可以使用.
这里面有一点例外: 当时备份cygwin时, 我找到了它对注册表的影响, 把相关的注册表也导出为一个文件, 在新电脑上解压之后的cygwin需要根据解压的具体路径修改一下这个注册表导出文件, 然后双击把注册表文件导入.
问题在于, 如果根本不导入这个注册表文件, cygwin的大部分功能也都可用, 你几乎觉查不到, 只不过bash 命令行上的$HOME指向了 C:\Documents and Settings\Administrator, 而不是 cygwin的home目录下你的用户目录. 这也没引起我的注意, 我只是把常用的.bashrc, .inputrc放在C:\Documents and Settings\Administrator 目录, 看来bash照样会读取.bashrc, .inputrc两个文件.
一个恼人的小问题是, 在bash命令行编辑环境中, 如果一个命令行超出了控制台窗口的边缘, 它不会折行, 我隐约记得这跟readline的配置文件.inputrc中的一项内容相关, 也找到了这个配置项: horizontal-scroll-mode
把它设为off 即可.
但是, 如果你的HOME是 C:\Documents and Settings\Administrator, 即使在 .inputrc中放置了这么一项, 即使用filemon验证用C-X, C-R 时, bash的确重新读取了.inputrc文件, 命令行编辑时的折行仍然不会如愿工作.
在把上述注册表文件导入之后, 再运行bash, 就可以通过 cygwin 的 /home/username/ 目录下的.inputrc清楚地看到 horizontal-scroll-mode选项是如何影响命令行编辑的折行的.
注册表内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions]
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin]
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2]
"cygdrive prefix"="/"
"cygdrive flags"=dword:0000002a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/]
"native"="T:\\zrf\\cygwin"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/bin]
"native"="T:\\zrf\\cygwin/bin"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/lib]
"native"="T:\\zrf\\cygwin/lib"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\Program Options]
路径名要自己根据实际情况修改.
在google上一些关于这个问题的讨论, 有一些讨论倾向于认为是readline的bug, 但似乎没有注意到是上述原因.
我的cygwin bash版本:
3.1.17(6)-release
readline 版本是:
libreadline6-5.1-5
用process explorer查看, bash运行时, 也只依赖于以下DLL:
cygiconv-2.dll
cygintl-3.dll
cygncurses-8.dll
cygreadline6.dll
cygwin1.dll
有关系的应该是readline库.
阅读(2046) | 评论(0) | 转发(0) |