Редактирование файлов в среде разработки подсистемы Windows для Linux


23

Подсистема Windows для Linux (WSL) прекрасно работает для обеспечения доступности большинства инструментов Linux для командной строки и работы в Windows без изменений. Тем не менее, это становится немного сложнее для развития, когда кто-то хочет

  • Создайте проект, используя набор инструментов Linux , который не имеет хорошо поддерживаемого эквивалента Windows (Ruby, Node и т. Д.)
  • Редактируйте файлы с помощью редактора графического интерфейса пользователя Windows, такого как код Visual Studio.

Проблема в том, что приложения Windows не могут изменять файлы внутри виртуальной файловой системы lxss . Известно, что прямое изменение этих файлов вызывает все виды проблем.

Поэтому, кажется, есть только два неоптимальных варианта использования WSL для разработки:

  1. Сохраните проект под lxss ( /home/foo). Обычный набор инструментов работает правильно. Тем не менее, редактирование ограничено либо Vim / Emacs на основе терминала, либо тем, что может быть запущено на опасном X-сервере , что менее плавно, чем в собственных редакторах, работающих в Windows.

  2. Сохраните проект в файловой системе Windows ( /mnt/c/Users/foo). Теперь любой Windows-редактор можно использовать для разработки. Однако набор инструментов на основе Linux хрупок, поскольку он не предназначен для использования на «сетевом диске» и может вызвать проблемы с просмотром файлов или базами данных .

Есть ли способ получить лучшее из обоих миров - то есть, чтобы иметь возможность редактировать с помощью собственного приложения Windows, но при этом иметь инструментальную цепочку Linux, как это обычно бывает на локальном диске?

Ответы:


4

Microsoft недавно добавила всестороннюю поддержку для этого, и она должна быть общедоступной в обновлении за апрель 2019 года (19H1). Как только он будет готов, сервер 9P будет работать в фоновом режиме всякий раз, когда работает дистрибутив Linux. Сервер 9P сможет обрабатывать метаданные файловой системы Linux, а Windows сможет обрабатывать его как сетевой диск, чтобы обеспечить безопасный доступ к нему. Вы можете прочитать об этом по адресу https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/ .

Благодаря новой функции вы сможете безопасно получать доступ к файлам файловой системы Windows и Linux из Windows, если вы проходите через сервер 9P. Это будет обработано изначально из WSL. Например, из командной строки WSL вы сможете набрать, code /mnt/c/Users/username/src/windows-file.txtчтобы открыть файл Windows в VS Code, или набрать, code /home/username/src/linux-file.txtчтобы открыть файл Linux в VS Code.

Если вы не являетесь частью программы Windows Insider, у вас еще не будет к ней доступа, поэтому вам все равно придется использовать более старый метод, такой как wslpath.

wslpath преобразует пути в стиле Windows и Linux, чтобы вы могли легко открывать файлы Windows из командной строки WSL. Согласно https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 , он откажется преобразовывать пути файловой системы Linux (то есть% AppData% \ lxss), потому что без 9P небезопасно изменять эти файлы из Windows , Это означает, что вы не можете открыть /home/username/src/linux-file.txt, но вы можете использовать code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)".

В прошлом было несколько сторонних инструментов для выполнения одного и того же преобразования, но wslpath делает это изначально - фактически, ls -l /bin/wslpathпоказывает, что это просто ссылка на / init.


@alex wsltools может конвертировать пути Linux в их эквиваленты Windows. Таким образом, вы можете открыть программу Windows из командной строки Linux и указать ей открыть файл в файловой системе Windows.
Шейн Лоуренс

Не думай так. blogs.msdn.microsoft.com/commandline/2016/11/17/… . Можете ли вы указать, что это безопасно?
Alex

@alex спасибо, что поднял это. Это хороший момент, чтобы уточнить. Ссылка, которой вы поделились (которая также находится в вопросе OP), говорит вам не открывать файлы в файловой системе Linux из Windows (то есть не используйте приложения Windows, чтобы изменить вещи в% AppData% \ lxss). Мой ответ и мой предыдущий комментарий описывают, как открывать файлы Windows внутри программ Windows из командной строки WSL (например, открыть «C: \ Users \ Username \ src \ example.txt» из его пути WSL »/ mnt / c / Users / имя пользователя / SRC / example.txt "). Также появился новый метод. Я обновил свой ответ, чтобы показать различия и новый метод.
Шейн Лоуренс

Шейн, какой смысл использовать WSL, если вы собираетесь редактировать файлы Windows с помощью двоичных файлов Windows? Почему бы просто не использовать Windows?
Алекс

Хорошая новость: WSL теперь может без проблем редактировать файлы linux с Win10 1903: devblogs.microsoft.com/commandline/… "В прошлом создание и изменение файлов Linux из Windows приводило к потере файлов или повреждению данных. крайне востребованная и долгожданная функция. Мы с гордостью сообщаем, что теперь вы можете легко получить доступ ко всем файлам в ваших дистрибутивах Linux из Windows ".
KERR

1

Я уверен, что более умные люди, чем я, смотрели на этот вопрос. Но я отвечу на это. Я искренне верю, что ответ в настоящее время нет. Есть лучший способ получить лучшее из обоих миров, кроме тех, которые вы упомянули (о которых я знаю).

Я уверен, что это не тот ответ, который кто-то хочет, но я думаю, что это правильный ответ. Я знаю, что это то, что Microsoft пытается сделать более гладкой, но это еще не сделано.


И это до сих пор нет.
Уго дер Хангриге

0

В первой половине 2018 года Microsoft выпустила некоторые улучшения WSL, которые решают некоторые из этих проблем:

Ни один из них полностью не затрагивает проблемы в моем первоначальном вопросе, но они могут улучшить удобство использования в определенных конкретных случаях.


Благодарность! Держите это в курсе. Я бы даже был в порядке, если бы он позволил мне «безопасно» использовать мой любимый графический редактор для выбора файлов, я мог бы жить без надлежащей интеграции инструментов сборки (это можно сделать из консоли). Даже временно "rsync-ing" файлы для локального копирования Windows будут в порядке, если это делается прозрачно. Я подошел к раздражающему моменту, там слишком сложно редактировать и отслеживать все файлы из CLI (по крайней мере, для меня), и я действительно просто хочу "сделать все, что есть на окнах," отправить / скопировать "код в WSL Запустите инструменты там
Дэн М.

0

Если вы хотите запускать команды Linux и редактировать с помощью редакторов Windows. Вы можете хранить свой исходный код (который вы хотите отредактировать и протестировать) где-нибудь в вашей файловой системе (например, c: \ source \) и обращаться к нему в консоли Linux через / mnt / c / source. Надеюсь это поможет.


0

Теперь Visual Studio Code поддерживает (как я его использую). «Расширение WSL», которое позволяет вам выполнять CRUD (создание, чтение, обновление, удаление) файлов / папок из местоположения Linux. Хотя я все еще изо всех сил пытаюсь получить ту же настройку для atom, которая была моим выбором редактора для разработки приложений на Rails на платформе Linux.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.