在 WSL 中使用 Powershell

在 WSL 中使用 Powershell

我在 Windows 10 上安装了 Powershell Core 6,并在 Ubuntu 18.04 LTS 上使用 WSL(适用于 Linux 的 Windows 子系统)。我喜欢 Powershell 6 终端,它支持文本编辑器中所需的许多键盘快捷键,例如ctrl-backspace删除整个单词之类的功能;它甚至支持ctrl-home删除ctrl-end到开头和删除到结尾。然而,相比之下,WSL 终端很糟糕。它甚至不支持ctrl-v粘贴!!!我每次都必须使用鼠标右键单击。

我知道如何在 Linux 上安装 Powershell,但即便如此,我仍然必须在该终端下使用 Powershell。有没有办法在 WSL 中使用普通的 Powershell(在 Windows 下),但在 Ubuntu 18.04 上呢?

答案1

今天,一个老问题被另一个答案所取代(这是正确的)。

简短答案

问题本身最大的误解是(正如@Biswapriyo 在编辑和评论中指出的那样)混淆了终端

不,您不能在“PowerShell 终端”中运行“WSL”,因为没有“PowerShell 终端”这样的东西(见下文)。

一些至少有与热键等同的功能:

特征 电源外壳 重击/ Zsh
删除前一个标记 Ctrl+Backspace Ctrl+W
删除至行首 Ctrl+Home Ctrl+U
删除至行末 Ctrl+End Ctrl+K

解释

当你运行 WSL 时,你正在运行一个。这是bash默认的,但也可以是zsh、或fish或其他任意一种。

PowerShell 也是一个

这些 shell 在终端,这是向您显示 shell 的窗口。默认情况下,在 Windows 10 中,全部shell 默认在旧版“Windows 控制台”中运行。这似乎是您正在运行的(至少在您提出问题时)。

其他终端可能包括 PowerShell ISE(据我了解,它基本上被 Visual Studio Code 取代了),或者Windows 终端(可从 Windows 商店安装)。还有很多其他的。当您安装不同的终端时,PowerShell(作为) 可以在该终端中运行,WSL shell 也可以,CMD shell 也可以。

旁注:Windows Terminal 旨在替代 Windows 控制台,并且最终(在 Windows 11 中)应该能够被设置为默认控制台。

当您按下某个键或键和弦(例如Ctrl+ End)时,该键会经过:

  • Windows,它首先检查是否有任何处理程序(例如Alt+F4向应用程序发送“退出”命令。或者如果你安装了 AutoHotkey 之类的东西,你按下的键可能会被处理那里第一的。

  • 然后 Windows 将其传递给终端. 终端可以选择处理。

    例如,无论您的 shell 是 CMD、PowerShell、WSL 中的 Bash 还是其他任何 shell , Alt+都由 Windows 控制台处理。按下该热键时,终端将在普通 Windows 和全屏模式之间切换。Enter

    其实非常Windows 控制台本身处理的几个按键。大多数按键进入下一步。但是,如果您选择应用程序菜单(单击左上角的图标)并转到属性,则可以启用 Ctrl+CCtrl+V进行复制/粘贴。

    Windows 终端则完全不同,默认情况下处理更多键。此外,你可以配置几乎所有键。例如,默认情况下,新安装的 Windows 终端绑定Ctrl+V粘贴。

    Ctrl+ HomeCtrl+EndCtrl+Backspace终端。这就是@Biswapriyo 在编辑和评论中试图帮助您理解的内容。

  • 如果它不是由 Windows 或终端处理,那么按键最终会到达 shell 本身。

    由于 Windows 控制台不处理Ctrl+ V,因此接收它。CMD 和 PowerShell 是 Windows 应用程序,可以直接与 Windows 剪贴板通信,因此它们可以捕获 + CtrlV从剪贴板检索文本,并将其插入到命令行中。

    另一方面,bash是在 Linux 内核下运行的 Linux 应用程序。它不知道如何与 Windows 剪贴板通信。这就是为什么它依赖于终端。

    此外,Ctrl+V在大多数 Linux shell 中都有明确的含义,而且这种用法甚至早于(我相信)Windows 用法。请参阅这个问题并在那里找到第一个答案以了解详细信息。

    对于其他编辑键,正如 @YorSubs 在该答案中指出的那样,有等效项。并且如果某些内容在您选择的 shell 中默认未绑定,则几乎总是可以配置的。

答案2

您引用的热键并非 PowerShell v6+ 终端所独有。自从 PowerShell 出现以来,您就能够这样做。甚至连 cmd.exe 多年来都有这些键盘热键。

您是否看过/考虑过使用/尝试过新的“Windows 终端' 适合您的用例吗?

人们在这里要表达的观点是,WSL 的存在是为了专门解决 Linux 交互式命令行用例,而不是 PowerShell 特定的东西。如果 MS 没有提供您想要的方法,那么您需要寻求 3rdP 的帮助。

Windows 终端设置文件 - 根据文档配置您想要的内容。

// 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 配置。

另请参阅微软的其他免费编辑器 -

在 WSL 中开发Visual Studio Code Remote - WSL 扩展可让您直接从 VS Code 使用适用于 Linux 的 Windows 子系统 (WSL) 作为您的全职开发环境。您可以在基于 Linux 的环境中进行开发,使用特定于 Linux 的工具链和实用程序,并在 Windows 中轻松运行和调试基于 Linux 的应用程序。

答案3

一种可能的解决方案是使用 PowerShell 并将 Linux 命令集成到 Windows 中,就像它们是本机应用程序一样。

该过程并不简单,微软博客中记录了
使用 PowerShell 和适用于 Linux 的 Windows 子系统将 Linux 命令集成到 Windows 中

本文描述的完整源代码以及将其纳入工作流程的额外帮助可在此处找到 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.

事实上,与 PowerShell 相比,WSL 中拥有更多的选项来操作控制台。

相关内容