我刚刚安装了 Cygwin,但对其工作原理有些困惑。我看到 中有一个“home”文件夹C:\cygwin\home
。我已经使用各自的安装程序在 Windows 计算机上安装并设置了 Mercurial、Vim、Git 等。如何让 Cygwin 使用这些程序及其配置文件(_vimrc 等)?
答案1
Cygwin 的主要目的是在 Windows 上提供类似 Linux 的环境。它最适合与为 Cygwin 编译的程序配合使用。它可以直接与本机 Windows 程序配合使用,但您必须小心。
Cygwin 的一个特性是它试图使 Windows 文件系统看起来像典型的 Linux 文件系统,例如,程序位于 /usr/bin 下。Cygwin 程序不引用 C: 驱动器,它们引用 /cygdrive/c。(有些 Cygwin 程序理解“C:”,但这些是例外。)虽然您的主目录在 Windows 中出现在 C:\cygwin\home 下,但在 Cygwin 中出现在 /home 下。这意味着在 Cygwin 程序和 Windows 程序之间传递完整路径名可能会很棘手:Windows 程序不理解 Cygwin 完整路径名,而 Cygwin 程序通常不理解 Windows 完整路径名。有一个 Cygwin 实用程序 cygpath,可以在 Windows 和 Cygwin 路径之间进行转换,但您必须根据需要自己插入该级别的转换。
我不知道 Cygwin 程序与 Windows 程序接口问题的通用解决方案。最佳解决方案取决于您要做什么、您想在多大程度上生活在 Linux 世界中而不是生活在 Windows 世界中,以及您需要使用的程序。
如果您打算从 Cygwin 命令行使用 Mercurial、Vim、Git 等,我建议您安装这些程序的 Cygwin 版本。您的系统上可以同时安装 Windows 和 Cygwin 版本,但您必须小心使用 PATH。
我尝试配置 Windows gvim 以使用 Cygwin shell,但最终放弃了。现在,我从 GUI 打开文件时使用 Windows gvim,从命令行打开文件时使用 Cygwin vim。在 Windows Vim 中有太多地方需要将 Windows OS API 的约定与外部程序的 Cygwin 约定相匹配。也就是说,对两者使用相同的用户配置文件很容易。在 Cygwin bash shell 中:
ln -s /cygdrive/c/Documents\ and\ Settings/username/_vimrc ~/.vimrc
ln -s /cygdrive/c/Documents\ and\ Settings/username/vimfiles ~/.vim
您只需确保所有这些文件都有 Unix 行尾,并d2u
在没有行尾的文件上使用。Cygwin 的 Vim(任何 Unix Vim)都要求 Unix 行尾;Windows Vim 接受 Unix 或 DOS 行尾。
我使用过不少 Cygwin,但还不是专家。以上只是我的经验。
答案2
通过确保这些程序位于操作系统的 PATH 环境变量中,大多数问题都可得到解决。
取决于您使用的 Windows 版本,即:
- 点击开始
- 右键单击“计算机”或“我的电脑”(或通过“控制面板”转到“系统设置”)
- 点击“高级”选项卡或“高级系统设置”
- 点击“环境变量”
- 滚动到 PATH
- 添加包含您想要的任何程序的文件夹的路径(例如,将 C:\vim72; 添加到 PATH 变量的开头,现在如果您在 cygwin 中输入“vim”,vim 就会执行(ps 分号很重要))
答案3
我编写了一个脚本来帮助解决 Windows 和 cygwin(路径)交互中的一些烦人的问题。
makewin() {
eval "function $1 {
# Don't taint locals
local FN
declare -a FN
local x
# For each option
for x in \"\${@}\"
do
# Fix the path to "windows"
FN[\"\${#FN[*]}\"]=\`cygpath -w \"\$x\"|sed 's/ /\\\\ /g'\`
done
# Run the Command
\"$2\" \"\${FN[@]}\" >/dev/null 2>/dev/null &
}";
}
然后我对每个要修复的命令运行它
makewin vi /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe
makewin np /cygdrive/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe
它为我想要的命令创建了一个函数别名,可以修复参数路径问题。这已添加到我的的〜/ .bash_profile