6

我不知道如何将 WSL 与 VS Code 集成。我可以使用以下命令打开集成终端:

"terminal.integrated.shell.windows": "C:\\Windows\\sysnative\\bash.exe"

集成终端工作。但是,我不能使用源代码控制或 VS Code 的任何 linting 功能。在源代码管理菜单上,它显示“没有活动的源代码管理提供程序。”。

这个问题可能是由 git 的路径引起的,但我不知道如何解决这个问题。我将不胜感激任何帮助。谢谢你。

4

3 回答 3

3

根据这篇文章,您必须编写一个批处理文件

@echo off
bash.exe -c "git %*"

并告诉 VsCode git 插件以这个 bat 文件为目标。(将终端设置为像您一样使用 bash)

你可以对所有的 linter/sniffer/helpers 插件执行此操作。

希望这可以帮助......并工作;-)

于 2017-12-13T13:13:47.470 回答
1

这些选项都不适合我,所以我建立了自己的!

你可以在这里找到我的完整解决方案:https ://gist.github.com/onecrayon/de756538d5331f7592065507c03b1864

简而言之:您需要通过批处理文件进行代理(如Pitrackster建议的那样),但是当与 VSC 一起使用时,它们的批处理文件将失败,因为它无法正确转义代理命令并且无法在 Windows 和 Unix 之间转换路径。


对于后代,这是我在发布此帖子时在上面链接的脚本,没有自述文件:

git.bat

@echo off

:: %~dp0 is the directory of this batch file
set proxy_path=%~dp0_proxy_cmd.bat
:: %* is the full command passed to this batch file
%proxy_path% git %*

_proxy_cmd.bat

@echo off

:: Properly escape the command
:: Many thanks to wsl-alias for this logic: https://github.com/leongrdic/wsl-alias
set cmd=%*
set cmd=%cmd:\"=\\"%
set cmd=%cmd:\'=\\'%
set cmd=%cmd:\=/%
set cmd=%cmd://=\\%
set cmd=%cmd:"=\"%
set cmd=%cmd:'=\'%
set cmd=%cmd:(=\(%
set cmd=%cmd:)=\)%

:: Grab the path to our proxy Bash script (%~dp0 is the directory of this batch file)
set bash_proxy=%~dp0_proxy_cmd.sh
set bash_proxy=%bash_proxy:\=\\%

:: Pass things off to the Bash script
bash.exe -c "$(wslpath %bash_proxy%) %cmd%"

_proxy_cmd.sh

##
# Evaluates command, parsing paths at both ends (Windows => Unix => Windows)
#
# Benefits to doing this instead of directly invoking the command in the batch file:
# 
# + Easier to convert path arguments to Unix paths
# + sed regex does not require double escaping backslashes (not embedded in double quotes)
##

cmd=()
for arg in "$@"
do
    if [[ $arg =~ ^[a-zA-Z]:/ ]]; then
        cmd+=( $(wslpath "$arg") )
    else
        cmd+=("$arg")
    fi
done

# TODO: Look into ways to convert inline paths via `wslpath` instead of hard-coding `/mnt` search
# Kind of a tricky issue, because our output could be basically anything
eval "${cmd[@]}" | sed \
    -e 's|"/mnt/\([a-zA-Z]\)/\([^"]*\)"|"\1:/\2"|g' \
    -e "s|'/mnt/\\([a-zA-Z]\\)/\\([^']*\\)'|'\\1:/\\2'|g" \
    -e 's|/mnt/\([A-Za-z]\)/\([^ ]*\)|\1:/\2|g' \
    -e 's|/|\\|g'
于 2019-04-12T21:36:32.143 回答
0

您需要在主机操作系统(Windows)上安装 Git,因为 VS Code 从 cmd 调用 git,而不是集成终端。

解决此问题的方法是为 Windows 安装 git。GitHub Desktop是一个不错的选择。

于 2017-10-10T03:50:06.817 回答