Использовать Powershell в WSL

Использовать Powershell в WSL

У меня установлен Powershell Core 6 на Windows 10, и я использую WSL (подсистема Windows для Linux) с Ubuntu 18.04 LTS. Мне нравится терминал Powershell 6, он поддерживает множество сочетаний клавиш, которые можно ожидать от текстового редактора, например, ctrl-backspaceдля удаления целых слов и тому подобного; он даже поддерживает ctrl-homeи ctrl-endдля удаления до начала и удаления до конца соответственно. Однако терминал WSL ужасен по сравнению с ним. Он даже не поддерживает ctrl-vвставку!!! Мне приходится каждый раз щелкать правой кнопкой мыши.

Я знаю, как установить Powershell на Linux, но даже в этом случае мне все равно придется использовать Powershell под этим терминалом. Есть ли способ использовать обычный Powershell (под Windows), но для моего Ubuntu 18.04 в WSL?

решение1

Старый вопрос, на который сегодня был добавлен другой ответ (он в процессе).

Короткий ответ

Самое большое недопонимание в самом вопросе (как указал @Biswapriyo в редактировании и комментариях) заключается в путанице междуоболочкаиТерминал.

Нет, вы не можете запустить «WSL» в «терминале PowerShell», поскольку такого понятия, как «терминал PowerShell», не существует (см. ниже).

Некоторыйоболочкаэквиваленты горячих клавиш, как минимум:

Особенность PowerShell Баш/Зш
Удалить предыдущий токен Ctrl+Backspace Ctrl+W
Удалить до начала строки Ctrl+Home Ctrl+U
Удалить до конца строки Ctrl+End Ctrl+K

Объяснение

Когда вы запускаете WSL, вы запускаетеоболочка. Это значение bashпо умолчанию, но может быть zsh, или fish, или любым из множества других.

PowerShell также являетсяоболочка.

Эти снаряды работают вТерминал, которое является окном, представляющим вам оболочку. По умолчанию в Windows 10,всеоболочки по умолчанию работают в устаревшей "Windows Console". Похоже, это то, что вы используете (по крайней мере, на момент, когда вы задали вопрос).

Другие терминалы могут включать PowerShell ISE (насколько я понимаю, он был практически заменен на Visual Studio Code) илиТерминал Windows(устанавливается из Магазина Windows). Есть также довольно много других. Когда вы устанавливаете другой терминал, PowerShell (какоболочка) может работать в этом терминале, как и ваша оболочка WSL, а также оболочка CMD.

Примечание: Windows Terminal разработан как замена Windows Console и в конечном итоге (в Windows 11) должен быть установлен в качестве консоли по умолчанию.

Когда вы нажимаете клавишу или сочетание клавиш (например, Ctrl+ End), эта клавиша проходит через:

  • Windows, которая сначала проверяет, есть ли какие-либо обработчики для него (например, Alt+ F4для отправки команды «Выход» в приложение). Или, если у вас установлено что-то вроде AutoHotkey, нажатая вами клавиша может быть обработанатампервый.

  • Затем Windows передает его вТерминал. Терминал может решить обработать его.

    Например, Alt+ Enterобрабатывается консолью Windows, независимо от того, является ли ваша оболочка CMD, PowerShell, Bash в WSL или чем-то еще. При нажатии этой горячей клавиши терминал будет переключаться между обычным режимом Windows и полноэкранным режимом.

    На самом деле естьоченьнесколько нажатий клавиш, которые обрабатывает сама Windows Console. Большинство переходит к следующему шагу. Однако, если выбрать меню приложения (щелкните значок в верхнем левом углу) и перейти в Свойства, можно включить Ctrl+ Cи Ctrl+ Vдля копирования/вставки.

    Windows Terminal совершенно другой и обрабатывает гораздо больше ключей по умолчанию. Более того, вы можете настроить почти все из них. Например, по умолчанию, недавно установленный Windows Terminalделаетсвязать Ctrl+ Vдля вставки.

    Но Ctrl+ Home, Ctrl+ Endи Ctrl+ Backspaceне имеют никакого отношения кТерминал. Именно это @Biswapriyo пытался вам помочь понять в своих правках и комментариях.

  • Если Windows или терминал не обрабатывают нажатие клавиши, оно в конечном итоге доходит до самой оболочки.

    Поскольку консоль Windows не обрабатывает Ctrl+ V,оболочкаполучает его. CMD и PowerShell — это приложения Windows, которые могут напрямую взаимодействовать с буфером обмена Windows, поэтому они могут перехватывать + Ctrl, Vизвлекать текст из буфера обмена и вставлять его в командную строку.

    С другой стороны, bashэто приложение Linux, работающее под управлением ядра Linux. Оно не знает, как общаться с буфером обмена Windows. Вот почему оно полагается на терминал для этого.

    Кроме того, Ctrl+ Vимеет устоявшееся значение в большинстве оболочек Linux, и его использование предшествовало (я полагаю) даже использованию в Windows. Смотритеэтот вопроси первый ответ там для подробностей.

    Для других клавиш редактирования, как указал @YorSubs в этом ответе, есть эквиваленты. И если что-то не привязано по умолчанию в выбранной вами оболочке, это почти всегда можно настроить.

решение2

Горячая клавиша, на которую вы ссылаетесь, не является уникальной для терминала PowerShell v6+. Вы могли делать это с тех пор, как появился PowerShell. Черт, даже cmd.exe имеет эти горячие клавиши уже много лет.

Вы рассматривали/рассматривали возможность использования/пробовали новый 'Терминал Windows' для вашего варианта использования?

Суть того, что люди здесь доносят, заключается в том, что WSL существует для решения интерактивной командной строки Linux, а не для PowerShell. Если MS не предоставляет способ сделать то, что вам нужно, то вам нужно обратиться к 3rdP.

Файл настроек Windows Terminal — настройте его по своему усмотрению в соответствии с документацией.

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    [
        {
            // Make changes here to the powershell.exe profile
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false
        },
        {
            // Make changes here to the cmd.exe profile
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "cmd",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ],

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

Видеть: Оформите свой терминал Windows и используйте WSL и PowerShell как профессионал В этом блоге речь идет конкретно о конфигурации Ubuntu.

См. также другой бесплатный редактор от Micorosft -

Разработка в WSLРасширение Visual Studio Code Remote - WSL позволяет использовать подсистему Windows для Linux (WSL) в качестве постоянной среды разработки прямо из VS Code. Вы можете разрабатывать в среде на базе Linux, использовать специфичные для Linux инструментальные цепочки и утилиты, а также запускать и отлаживать приложения на базе Linux, и все это с комфортом Windows.

решение3

Одним из возможных решений является использование PowerShell и интеграция команд Linux в Windows, как если бы они были собственными приложениями.

Процедура непростая и описана в блоге Microsoft.
Интеграция команд Linux в Windows с помощью PowerShell и подсистемы Windows для Linux.

Полный исходный код, описанный в статье, а также дополнительная помощь по его внедрению в ваш рабочий процесс доступны по адресу https://github.com/mikebattista/PowerShell-WSL-Interop.

решение4

Все стандартные консоли WSL поддерживают Ctrl-Shift-c(копирование) и Ctrl-Shift-vвставку (не включено по умолчанию, перейдите в Свойства и отметьте опцию, чтобы включить это, и обратите внимание, что это также работает в командных строках PowerShell и CMD). Вы также можете скопировать текст, выделив его, а затем щелкнув правой кнопкой мыши). Кроме того, вы можете использовать Ctrl-Shift-Enterдля переключения полноэкранного режима, и у вас также есть все возможности bashв консоли bash, например:

Tab    Autocomplete commands
Ctrl + r   Search the history of commands used
Ctrl + a / e  Move to start / end of current line
Alt + f / b   Move to the next / previous word
Ctrl + u / k  Cut all text on the left / right side of the cursor
Ctrl + w   Cut the word on the left side of the cursor
Ctrl + d   Logout of Terminal or ssh (or tmux) session,   Ctrl + l   Clear Terminal

Примечание Ctrl u / k. Также обратите внимание Alt-Left/Right(с помощью клавиш курсора) для перехода между словами.

Также будет полезно узнать некоторые tmuxиз его замечательных инструментов для работы с панелями:

C-b : (to enter command mode), then  :ls, :help, :set mouse on  (or other commands)
C-d  (Note: no C-b first!)  (Detach from a session, or C-b d or C-b D for interactive)
'M-' stands for 'Meta' key and is the Alt key on Linux
C-b ?  (list all key bindings)   C-z  (Suspend tmux)   C-q  (Unsuspend tmux)
tmux a (Attach last session)    tmux a -t mysession   (Attach to mysession)
tmux ls (list sessions),  tmux a (attach),   tmux a -t <name> (attach named session)
tmux  (start tmux),   tmux new -s <name>,   tmux new -s mysession -n mywindow
tmux kill-session –t <name>     (kill a session)   tmux kill-server  (kill tmux server)

***** Panes (press C-b first):
"  (Split new pane up/down)                  %  (Split new pane left/right)
z  (Toggle zoom of current pane)             x  (Kill current pane)
{ / }  (Swap current pane with previous pane / next pane)   t  (Show the time in pane)
q  (Display pane indexes)                    !  (Break current pane out of the window)
m  (Mark current pane, see :select-pane -m)  M  Clear marked pane
Up/Down/Left/Right    (Change pane in cursorkey direction, must let go of Ctrl)
C-Up/Down/Left/Right  (Resize the current pane in steps of 1 cell, must hold down Ctrl)
M-Left, M-Right  (Resize current pane in steps of 5 cells)
o  (Go to next pane in current window)       ;  (Move to the previously active pane)
C-o  (rotate panes in current window)       M-o  (Rotate panes backwards)
M-1 to M-5  (Arrange panes preset layouts: tiled, horizontal, vertical, main-hor, main-ver)

***** Windows (press C-b first):
c       (Create a new window)         ,  (Rename the current window)
0 to 9  (Select windows 0 to 9)       '  (Prompt for window index to select)
s / w   (Window preview)              .  (Prompt for an index to move the current window)
w       (Choose the current window interactively)     &  (Kill the current window)
n / p   (Change to next / previous window)      l  (Change to previously selected window)
i       (Quick window info in tray)

***** Sessions (press C-b first):
$  (Rename the current session)
( / )  (Switch 'attached' client to previous / next session)
L  Switch the attached client back to the last session.
f  Prompt to search for text in open windows.
r  Force redraw of the attached client.
s  (Select a new session for the attached client interactively)
~  Show previous messages from tmux, if any.
Page Up     Enter copy mode and scroll one page up.
Space       Arrange the current window in the next preset layout.
M-n         Move to the next window with a bell or activity marker.
M-p         Move to the previous window with a bell or activity marker.

***** Buffers (copy mode)
[  (Enter 'copy mode' to use PgUp/PgDn etc, press 'q' to leave copy mode)
]  (View history / Paste the most recent text buffer)
#  (List all paste buffers     =  (Choose a buffer to paste, from a list)
-  Delete the most recently copied buffer of text.
C-Up, C-Down
M-Up, M-Down
Key bindings may be changed with the bind-key and unbind-key commands.

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

Связанный контент