
У меня установлен 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.