【问题标题】:Changing directory in Git-Bash: using Windows-style directory addresses in MINGW64 on Windows machines在 Git-Bash 中更改目录:在 Windows 机器上的 MINGW64 中使用 Windows 样式的目录地址
【发布时间】:2017-12-21 09:28:06
【问题描述】:

问题:

git-bash.exeMINGW64 识别地址以/Drive_Name/Folder1/Subfolder1 形式给出的目录的cd 命令。为 Windows 机器用户更改主目录的示例是:cd /c/users/USERNAME

  • 是否可以使用以下语法? cd c:\users\USERNAME 请注意,目录地址以其“本机”格式给出:Windows 操作系统可识别的语法。

  • 或者,有没有办法在粘贴到 Git-bash 窗口时自动将所有反斜杠更改为正斜杠?

背景

我每天都在使用git-bash.exe:拉取和推送到 Github,运行latexmk 来编译我的*.tex 文档以及通过 SSH 连接我的 Linux 机器。在所需的目录位置快速启动git-bash.exe 进程会很好。而且,在 Windows 操作系统上,以C:\users\USERNAME\project 形式获取地址是默认设置。

git-bash.exe 喜欢的各种语法:

  • 格式 1:GNU 原生格式 --- /c/users/USERNAME;
  • 格式 2:半 Windows 操作系统格式 ==> 使用正斜杠作为分隔符 --- c:/users/USERNAME;
  • 格式 3:半 Windows 操作系统格式 ==> 使用两个反斜杠作为分隔符 --- c:\\users\\USERNAME(来源:@VonC

或者(待定解决方案)

一个有效的替代方法是让一些第三方进程监控剪贴板,并将所有反斜杠切换为正斜杠。就我而言,这可能会发生:

  1. [已解决]Vim 中,当我使用以下映射来获取文件的“父目录”时:nnoremap <leader><leader>p :let @* = expand("%:p:h")<CR>

    • 解决方案:set shellslash,更多详情请参见“暂定解决方案”。
  2. 虽然一些剪贴板监控/录制应用程序:简单地识别分配给系统剪贴板的字符串是文件夹/目录的地址,并将所有反斜杠替换为正斜杠。

【问题讨论】:

  • "是否可以使用以下语法?cd c:\users\USERNAME。2019 年第三季度,Git 2.23,是的,可以。见my edited answer below

标签: windows vim git-bash


【解决方案1】:

可以使用下面的语法吗?

cd c:\users\USERNAME

我刚刚尝试了最新的 Git 2.13.3 bash:它可以工作,但我必须输入:

cd c:\\users\\USERNAME

2 年后(2019 年第三季度),您甚至不需要转义 \,或者使用单引号或双引号:

  • 对于没有空间的路径,它确实可以工作;
  • 它适用于带有空格的路径的单引号或双引号。

例子:

vonc@voncav MINGW64 /c/Users
$ git version
git version 2.23.0.windows.1

vonc@voncav MINGW64 /c/Users
$ bash --version
GNU bash, version 4.4.23(1)-release (x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

对于没有空格的路径:

vonc@voncav MINGW64 /d/git
$ cd "c:\Users"

vonc@voncav MINGW64 /c/Users
$ cd 'D:\git'

vonc@voncav MINGW64 /c/Users
$ cd D:\git                      <=========

vonc@voncav MINGW64 /d/git       <=========

对于带空格的路径:

vonc@voncav MINGW64 /d/git
$ cd C:\Program Files
bash: cd: too many arguments

vonc@voncav MINGW64 /d/git
$ cd "C:\Program Files"

vonc@voncav MINGW64 /d/git
$ cd 'C:\Program Files'

【讨论】:

  • 确切地说,中间有一个反斜杠(“``”)的“普通”地址是不允许的;至少正如您所演示的,我们需要同时使用其中两个:第一个反斜杠用作转义字符,第二个用作实际的目录分隔符。
【解决方案2】:

替代解决方案:使用 单引号 似乎确实有效。示例:

cd 'c:\users\USERNAME\Folder_1'

来源:Forward slash vs backward slash for file path in git bash

【讨论】:

    【解决方案3】:

    通过Vim的初步解决方案

    .vimrc(或_vimrc for Windows)中,使用设置:set shellslash,并使用以下映射复制地址:

    • 文件的绝对目录:

      nnoremap &lt;leader&gt;&lt;leader&gt;f :let @* = expand("%:p")&lt;CR&gt;

    • 父文件夹的绝对目录:

      nnoremap &lt;leader&gt;&lt;leader&gt;p :let @* = expand("%:p:h")&lt;CR&gt;

    • 参考:Is it possible to make vim use forward slashes on windows?

    • 其他有用的映射:

      " File Name only, without extension
      nnoremap <leader><leader>n :let @* = expand("%:t:r")<CR>
      " Extension.
      nnoremap <leader><leader>e :let @* = expand("%:t:e")<CR>
      " Copy the line number with file name
      nnoremap <leader><leader>l :let @* = expand("%:p").":".line(".")<CR>
      

    说明

    此解决方案的基础是:

    1. git-bash.exe 能够识别以下形式的地址:c:/users/USERNAME/document,其中 正斜杠 用作分隔符。

    2. Vim 的本机函数expand("%:p")(带有其他标志)可以将目录信息复制到剪贴板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 2017-10-08
      • 2013-08-19
      • 2019-07-27
      • 2014-04-15
      • 1970-01-01
      • 2017-01-07
      • 2013-09-14
      相关资源
      最近更新 更多