V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firhome
V2EX  ›  Windows

如何让 windows 命令行如 mac 般丝滑?

  •  
  •   firhome · 303 天前 · 4696 次点击
    这是一个创建于 303 天前的主题,其中的信息可能已经有所发展或是发生改变。

    标题可能起的不对,10 多年 mac 用户,最近买了台 windows 机器做开发。

    发现命令行完全看不懂怎么玩,一个 PowerShell 可以打开好几个不同的工具,分不清 cmd 和 PowerShell 的区别。

    现在装了 git bash ,PowerShell 里又可以打开 git bash 了。 简直晕了。。。

    在 mac

    gss = git status

    再比如 open . 打开当前目录之类的。。。

    然后很多 mac 设置的 alias 不知道 windows 怎么设置?或者有什么设置工具推荐吗?

    42 条回复    2024-01-28 23:12:21 +08:00
    libook
        1
    libook  
       303 天前   ❤️ 1
    不丝滑==不了解

    等你了解 cmd/powershell 像对 bash 那么了解了,你就会觉得丝滑了。

    话说 windows 上有 WSL(2),可以给你一个 Linux Shell ,那个可以比 mac 更丝滑。
    fatigue
        2
    fatigue  
       303 天前
    windows terminal 默认启动 wsl 就行了,用了好多年了
    mcluyu
        3
    mcluyu  
       303 天前
    下个微软终端, 然后装 wsl ,wsl 里再装你 mac 上用的 shell 比如 zsh ,oh my zsh 那不就一样了
    Vegetable
        4
    Vegetable  
       303 天前   ❤️ 5
    1. gss 是 zsh(oh my zsh)的内置的 alias ,gss='git status --short' 并不是什么 mac 的功能,这一点你用了十多年不知道吗?

    2. mac 的 open 对应 windows 的 start 和 linux 的 xdg-open ,手边没有 windows 我也不确定了,不过 windows 打开当前目录我一般用 explorer .

    3. windows 目前主流是用 terminal 启动 powershell ,但是体验上并不算太好,https://learn.microsoft.com/zh-cn/windows/terminal/

    4. windows 也有类似 oh my zsh 的 oh my posh ,可惜启动速度超级慢

    5. 想在 windows 获得流畅的命令行体验,还是 WSL 靠谱
    dhb233
        5
    dhb233  
       303 天前   ❤️ 2
    这么说的话,用习惯了 Linux 的命令行,还觉得 mac 的很奇怪呢。很多命令名字一样,用法不一样
    littlewing
        6
    littlewing  
       303 天前
    WSL2
    Kaiv2
        7
    Kaiv2  
       303 天前   ❤️ 2
    建议安装 linux 系统使用
    star9029
        8
    star9029  
       303 天前
    Windows terminal + nushell + 各种命令行小工具
    pendulum
        9
    pendulum  
       303 天前
    这个要花时间学的,不想学就 wsl
    zhazi
        10
    zhazi  
       303 天前   ❤️ 2
    windows 的盘符和目录转义符让我完全没兴趣用它的 terminal
    kinboy
        11
    kinboy  
       303 天前
    现在开发环境都在 WSL2 里面,无比丝滑,配合 VSCode remote ssh
    快捷键 win + ` 随时呼出
    WSL 系统本地存储默认在 C 盘,记得装完以后迁移到其他盘去
    godall
        12
    godall  
       303 天前   ❤️ 1
    在 Linux/mac 里:
    alias ll=ls -l

    在 Windows 里:
    doskey ll=dir /l

    是完全一样的,仅仅就是 alias 与 doskey 的区别
    yangzzzzzz
        13
    yangzzzzzz  
       303 天前   ❤️ 1
    可以试试 ps7 + starship https://starship.rs/
    yangzzzzzz
        14
    yangzzzzzz  
       303 天前   ❤️ 1
    或者楼上说的 装个 wsl2 开发环境装在 wsl 里 https://juejin.cn/post/7064161133996802061
    xmuli
        15
    xmuli  
       303 天前 via iPhone   ❤️ 1
    写过一篇扫盲 《 Shell 、Bash 、CMD 、PowerShell 的区别》 https://xmuli.tech/posts/d0c4daee/

    然后 Windows 使用优雅的终端《 Windows 打造颜值和实用可媲美 Linux 的终端:Pwsh7 + OhMyPosh 》 https://xmuli.tech/posts/5b69dcad/

    应该解疑 op “不丝滑”的原因,另推荐直接使用 pwsh7 取代 GitBash
    --来自一个三大系统都会使用到的用户
    byte10
        16
    byte10  
       303 天前
    把 windows 安装成 pve 就可以了,然后拿 M1 AIR + vscode remote ,完美体验。
    error451
        17
    error451  
       303 天前   ❤️ 9
    @libook powershell 丝滑?你真搞笑。
    bash 巨简单的操作, 在 powershell 跟屎一样。
    比如 ls | grep log 找出结果中包含 log 的行 ,知道 powershell 里怎么做吗? get-ChildItem | Where-Object Name -like "*log*"
    注意啊 -like "log" 还只能精确匹配 log .
    我不知道命令咋用了,bash 就是简单的 ls --help
    powershell 给你来个 Get-help Get-ChildItem , 然后 帮助也不是那么详细,动不动给你来个更多信息请访问网址 XXX ..... 你特么的在逗我吗? 你家服务器随便就能上外网是吧。

    grep 不论是查找标准输入输出,还是查找文件内容, 统统搞定。
    powershell 给你分成三个, 标准输入输出的 得用 Where-Object , 查找文本得用 Select—String , 查找内容得用 Select-Content

    设计 powershell 的人脑子里有屎是吧? 敢情 power 的意思就是命令越复杂越好是吧?

    如何设置 alias ? 请参考 get-help set-alias 用法是 set-alias -name (alias) -value (command)

    ps 高版本的 powershell 估计也意识到太过分了,内置了一大堆 alias 比如 get-childitem -> ls 等等, 但是, 仍然是...
    wjx0912
        18
    wjx0912  
       303 天前
    别折腾了,这是不可能的事
    version
        19
    version  
       303 天前
    实际上没那么多命令行要操作吧...天天重复命令行...还不如使用 vscode 配置 tasks 界面上操作选择任务.
    git 老老实实安装个 sourcetree 看些别人的更新日志.开源项目的代码变动.也方便.点点点就好.
    Alias4ck
        20
    Alias4ck  
       303 天前
    弄个 wsl 一样丝滑
    mmxq
        21
    mmxq  
       303 天前
    完全可以.......
    Windows Terminal + scoop ( winget ) + starship 用来最基础的美化和安装包管理,启动速度和效果非常好。
    然后想实现 Linux 下的命令可以 scoop install busybox 用 Linux 下习惯的命令操作日常,不在被 powershell 那冗长的命令膈应。
    楼上说到 grep 检索包含 log 的命令完全可以照搬过来一行搞定。
    acctv2
        22
    acctv2  
       303 天前
    @error451 PS 设计上是脚本语言,不是单纯的 shell 命令。你要是只用用 ls 之类的可以自己设置 alias 。

    话说丝滑不丝滑跟这个有什么关系? PS 执行的时候很卡吗?
    chendl111
        23
    chendl111  
       303 天前
    用 wsl2
    charlie21
        24
    charlie21  
       303 天前 via Android
    所有开发环境装在 wsl 2 里,宿主机只装 choco 和一个 Windows Terminal 完事
    lpdswing
        25
    lpdswing  
       303 天前
    没必要折腾,正常用 cmd 就够了
    cbdyzj
        26
    cbdyzj  
       303 天前
    没有办法,不建议用 Windows 做开发
    Mbb38C3HtyZydTt7
        27
    Mbb38C3HtyZydTt7  
       303 天前
    只需要 pwsh7 即可,也就是最新版的 pwsh , 有自动补全
    然后 `vim $profile`,相当于 `vim .bashrc`
    把下面这行加进去,就可以和正常的 linux 一样用了, 比如快捷键 `Ctrl F` , `Ctrl P` 之类的
    `Set-PSReadLineOption -EditMode Emacs`

    alias 比较麻烦一点,但是能用
    ```
    function gitStatus { git status }
    Set-Alias -Name gs -Value gitStatus

    Set-Alias -Name l -Value 'ls'

    ```
    不会的直接叫 ChatGPT 把命令转化为相同的 pwsh 命令即可

    pwsh 命令行 + scoop 包管理器 ,体验真的很不错了
    lividsu
        28
    lividsu  
       303 天前
    powershell 里支持 ls, pwd 什么的,用起来比 cmd 舒服很多
    newdongyuwei
        29
    newdongyuwei  
       303 天前
    git bash 都安装了,可以加下面的 alias:
    alias open=explorer
    body007
        30
    body007  
       303 天前
    我用 cmder ,很丝滑。可能我比较菜吧。
    bianhui
        31
    bianhui  
       303 天前
    假装自己用的就是 mac
    vvhy
        32
    vvhy  
       303 天前   ❤️ 2
    @error451
    grep 不是单独的程序吗,什么时候变成 bash 的功能了。另外 powershell 也可以`ls *log*`。
    bash 面向字符串,powershell 面向对象,只能说是思想不一样,各有优点。
    至于命令名字太长,个人觉得写完整更清晰好记。
    ksc010
        33
    ksc010  
       303 天前
    cmder
    z1829909
        34
    z1829909  
       303 天前
    echo $profile 会输出一个文件地址, 在里面可以写一些 function, 可以加别名
    start .打开当前目录
    joshua7v
        35
    joshua7v  
       303 天前
    我是用各自平台的命令,常见的很多命令都有对应的可以用

    rm -> del
    grep -> findstr
    open -> start
    ...
    rxmt
        36
    rxmt  
       303 天前   ❤️ 1
    有没有人觉得,用 windows 的话 git 自带的 git bash 挺好用的。。。日常用 mac ,偶尔 windows 会把 git bash 放进 windows terminal 里面用...
    lyc8503
        37
    lyc8503  
       302 天前 via Android
    msys2 或者 wsl

    众所周之,wsl 是最好的 linux 发行版

    反而是 mac 下的终端有些指令参数和 linux 不一致
    cabbage
        38
    cabbage  
       302 天前
    @rxmt +1 以前工作环境是 Windows 7 的时候就把 gitbash 带的 bash 当日常 shell 重度用,ps 我确实用不来。记得 windows 的 gitbash 其实就是给安装了个 mingw 环境,附带一票 coreutils 小工具,openssh 之类,再加上个 git ,除开个别路径问题外,日常用和普通 gnu linux 差别不大,体验尚可。好像还带了个可选安装的 kitty 终端模拟器,反正比 windows 黑乎乎的 conhost 好用太多
    Ethkuil
        39
    Ethkuil  
       302 天前 via Android
    winget add Git.Git
    winget add MSYS2.MSYS2

    # .bashrc
    export PATH="$PATH:/c/msys64/usr/bin/"

    pacman -S tree rsync

    winget add gerardog.gsudo
    winget add Docker.DockerDesktop

    ln -s -> mklink
    open -> start
    shutdown -> shutdown

    我觉得完全不比 mac 的差吧?

    ## 路径

    Git Bash for Windows 默认用 Unix 风格路径,Windows 风格则可套层引号转义后使用,兼顾。
    此外,Git for Windows 自带一个 cygpath 命令,能方便地在各种路径风格间转换。
    顺便一提,Git for Windows 里的 pwd 可接受 -W 标志 输出 Windows 风格路径。

    一般 Unix 那套已经够了,不过偶尔在 Bash 里调用 Windows 命令时,还是要直面这个问题的。补充两点:
    1. 不知是冷知识还是热知识:Windows 其实支持使用正斜杠作为路径分隔符。故在 Bash 里调用 Windows 命令时,路径参数形如 C:/my/path 为好,因为在 Bash 里处理反斜杠太噩梦了。
    2. 许多 Windows 自带命令的参数格式是 /a, /s 这样以正斜杠开头的,在 MSYS 环境里会被当成「路径」转义掉,然后就不能正确执行了……
    例:shutdown /s /t 60
    不知是冷知识还是热知识:有些 Windows 命令其实也支持 -a 这样以连字符开头的 参数格式,尽管其 help 里只会演示 正斜杠开头的。
    解决方案:shutdown -s -t 60
    iorilu
        40
    iorilu  
       302 天前 via Android
    不想学习新东西就装 wsl ,然后和原来一样用就是

    或者装 Windows terminal ,学点 powershell 也行,
    不装 wsl 可用 git bash ,但肯定不好看就是

    另外,powershell 可是比其他 shell 功能远远强大,当然了,不是 Windows 开发专家的人一般没人会研究
    rxmt
        41
    rxmt  
       301 天前 via iPhone
    @cabbage 哈哈哈哈哈哈,握手!
    CLMan
        42
    CLMan  
       301 天前
    命令行,不仅仅是 shell(cmd,powershell,bash,zsh...),还包括一系列命令行工具,Linux,MacOS 用户熟悉的是 Unix Tools 。

    CMD 是 DOS 系统的延续,powershell 是 Winodws 从 Vista 重新设计的一款 shell 。由于 Winodws 主要面向消费者市场,且后续进入 GUI 时代,因此 DOS 系的 shell 和命令行套件就渐渐没啥人用了。而 Unix 系的 shell 和套件由于 linux 在服务端的流行,因此成为了主流。

    shell 本质上只是一个程序,powershell 里面启动 git bash ,与 bash 里面启动 zsh ,或者任意 shell 里面启动 Python 没有什么区别。

    用 cmd,powershell 意味着你需要从头学一个 shell ,除非是项目需求,个人是不建议学这两个东西,应用面太窄。

    Windows 上的 git 提供了 bash ,以及部分 UNIX Tools 。

    msys2 或者 cygwin 相比 git ,提供了 bash 以及完整的 Unix Tools 。

    但无论是 git 还是 msys2,cygwin ,与 windows 不太搭,包括样式、启动速度、以及存在一些兼容性问题,比如需要用 winpty 来执行 python 命令。

    wsl2 需要开启 Hyper-V ,对性能存在一些影响。由于是采用虚拟化方案,跨文件系统的 IO 性能较差。

    总之,目前没有一个完美的解决方案,能平替 Linux/MacOS 下的 Unix 系的命令行效果。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:16 · PVG 23:16 · LAX 07:16 · JFK 10:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.