Cygwin:使用 Windows 中已安装的程序?

Cygwin:使用 Windows 中已安装的程序?

我刚刚安装了 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 版本,即:

  1. 点击开始
  2. 右键单击“计算机”或“我的电脑”(或通过“控制面板”转到“系统设置”)
  3. 点击“高级”选项卡或“高级系统设置”
  4. 点击“环境变量”
  5. 滚动到 PATH
  6. 添加包含您想要的任何程序的文件夹的路径(例如,将 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

相关内容