Windows11 常用软件/环境安装记录


Windows 编程 - The Tools I use

软件安装和管理

将软件装到统一一个地方,路径简短,不含空格和中文。

WinGet

官方 Windows 软件包管理器

WinGet 在安装命令之后加上 --rainbow 的参数,会出现🌈进度条

Scoop

Scoop 可通过命令行轻松安装程序,以可移植的方式下载和管理包

使用以下命令在 powershell 中安装 Scoop:

先设置安装位置(自行修改)

$env:SCOOP='D:\Scoop\'

然后执行

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex

如果出现Invoke-RestMethod: 请求的名称有效,但是找不到请求的类型的数据。,代表网络可能受到限制,需要一定科学手段解决。

相关设置

下载 aria2 使用多线程提速

scoop install aria2

设置代理以提速,假设代理端口在本地7890端口

scoop config proxy 127.0.0.1:7890

安装一些软件需要7z,可以先手动安装,或者 scoop 会帮你安装

推荐添加bucket: extras, java, versions, dorado . 添加 bucket 需安装git,scoop 会帮你安装。

cache 可以定期清理,

scoop cache rm * # 清除全部cache

升级后旧版本默认不清除,可以使用cleanup + 软件包名 或 * 清除所有的软件包旧版本

scoop cleanup *

相关资源up

阿虚的储物间:https://axutongxue.com/


2024.02.04补充:

记录一个遇到的一个非常傻宝的问题: 此文件来自其他计算机,可能被阻止以帮助保护该计算机 ,有些文件或程序双击运行没反应可能就是这个原因。

Code Editor and Terminal

  • Code Editor

    • VSCode,这里有我的相关配置

    • CLion

    • IDEA

    • vim / nvim / lvim

    • Visual Studio

  • Terminal

    • ConEmu 是一个功能齐全的 Windows 终端。 现在使用里面的clink,配置方便

    • Fluent Terminal,好看,但是启动慢

    • 然后我转而使用 wsltty 和 tmux。

    • 现在正在使用新的 Microsoft Terminal,因为它可以在 WSL 1 和 WSL 2 发行版之间无缝切换,并且输入延迟低。

    • Alacritty,跨平台,rust编写,但是功能少,不支持斜体、图像、多标签、分页,需要指定配置位置,但是支持的字体的渲染还不错。

    • wezterm, 跨平台,功能全面,支持图像、自带 ssh,rust 编写,目前的备用,但是比较慢。

  • tmux。 如果您有兴趣学习如何使用 tmux,这里有一篇关于 tmux 的教程。

peripherals

  • 显示器:

    • Redmi A27q:2K 显示器,色准优秀,显示效果舒服。可惜只有 75Hz

    • Lecoo b2413E:1K 显示器,TN/VA 显示效果烂,拖影严重,75Hz 和 25Hz一样,别买

  • 键盘:

    • VGN S99 阿尼亚轴:轴体清脆动听ing,十分甚至九分的HIFI,打字手感好,电池大

    • VGN N75 三模:游戏轴

    • Huawei CD34:薄膜键盘中手感还不错,轻便,咸鱼150+ 可入。

  • 电脑:Y9000X 2022。重薄本

  • 耳机:

    • Sony WH-1000XM3:大耳,降噪很不错,音质嘛...

    • Sennheiser IE 80S:捡漏

    • 水雨月 竹

 


windows 命令行基本设置:

PowerShell 7

PowerShell 是一个跨平台 shell。是 Windows PowerShell 的分支,功能更加强大。

文档:从 Windows PowerShell 5.1 迁移到 PowerShell 7

PowerShell 7 标志着 Windows PowerShell 最大化向后兼容的完成。我们认为 PowerShell 7 及其以后的版本才是真正的 PowerShell。

Linux:这个 shell 不寻常 Powershell:Linux 有什么鬼心肠? .Net:这小 Lin 一点面子也不讲 Powershell:这草包倒是一堵挡风的墙。 Linux:她态度不卑又不亢 Powershell:他对我不阴又不阳 .Net:Linux 搞的什么鬼花样

下载:

  • GitHub“releases”页下载 msi 安装包

  • winget install powershell

  • scoop install powershell

相关命令查询:https://www.pdq.com/powershell/

修改编码为 UTF-8

在 .NET、Web 以及 Linux 领域中,UTF-8 现在是主流编码。统一编码有助于处理各种低级问题。

Windows10以前 UTF-8 (65001) 是一个残缺的代码页需要使用第三方终端模拟器如MinTTY、Cmder。

Win10 引入的 Windows Terminal 配合新控制台(conhost)基本上处理了这个问题。

修改编码通常是指更改用于显示文本的字符编码。在Windows环境中,代码页是一种定义字符集和编码的系统。在这种情况下,主要是指控制 shell 文本输出的字符编码。

PowerShell Core 默认支持 UTF-8( 见PowerShell 的默认编码 ),这是一种通用的字符编码。在一些情况下,可能需要手动设置编码以确保正确显示字符。

https://stackoverflow.com/a/57134096

如果你尝试在 PowerShell 会话中使用 chcp 65001 来更改代码页,可能会发现它无效。这是因为在启动时,.NET 缓存了控制台的输出编码,而后续使用 chcp 命令所做的更改不会被识别。请注意,chcpcmd.exe(命令提示符)中有效,因为 CMD 读取管道输出时使用控制台输出代码页。然而,它不适用于 PowerShell 本身,包括其内部命令(也称为 cmdlet)。

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

添加到 $PROFILE 来设置输出编码为 utf-8

以下可先安装 scoop 后再来操作


PowerShell 模块

PSReadLine

PSReadLine是微软创建的一个模块,用于自定义PowerShell中的命令行编辑环境。运行命令安装:

Install-Module PSReadLine

通过以下方式启用它:

Import-Module PSReadLine

starship

美化shell 提示符

PowerShell 输入以下命令安装 posh-git 和 oh-my-posh

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

安装完成后可以使用下面命令查看可用主题.

Get-PoshThemes

现在转到starship以提升启动速度, posh-git + oh-my-posh 和 starship 二选一即可

scoop install starship

其他

gsudoModule: 使用scoop安装gsudo附带模块

scoop-search:提升scoop 搜索速度

scoop install scoop-search

PSFzf: Fzf 模糊搜索

Install-Module -Name PSFzf

需安装Fzf

scoop install fzf

Get-ChildItemColor: 提供类似ls命令的模块

Install-Module Get-ChildItemColor

DirColors: 优化目录颜色

Install-Module DirColors

PowerShell PROFILE 配置文件

$PROFILE.CurrentUserAllHosts (通过在pwsh中echo $PROFILE.CurrentUserAllHosts 查看位置)中添加Import-Module posh-git 等启用对应美化模块

参考配置文件:

# Import-Module
$env:SCOOP='D:\Scoop\'
$env:SCOOP_GLOBAL='D:\Scoop\global'
Import-Module PSReadLine
Import-Module PSFzf
Import-Module "$env:SCOOP\apps\gsudo\Current\gsudoModule.psd1"
Invoke-Expression (&scoop-search --hook)
Invoke-Expression (&starship init powershell)
Import-Module DirColors
# oh-my-posh --init --shell pwsh --config ~/agnoster.minimal.omp.json | Invoke-Expression
# Import-Module posh-git
# Dracula Prompt Configuration
#$GitPromptSettings.DefaultPromptPrefix.Text = "$([char]0x2192) " # arrow unicode symbol
#$GitPromptSettings.DefaultPromptPrefix.ForegroundColor = [ConsoleColor]::Green
#$GitPromptSettings.DefaultPromptPath.ForegroundColor =[ConsoleColor]::Cyan
#$GitPromptSettings.DefaultPromptSuffix.Text = "$([char]0x203A) " # chevron unicode symbol
#$GitPromptSettings.DefaultPromptSuffix.ForegroundColor = [ConsoleColor]::Magenta
# Dracula Git Status Configuration
#$GitPromptSettings.BeforeStatus.ForegroundColor = [ConsoleColor]::Blue
#$GitPromptSettings.BranchColor.ForegroundColor = [ConsoleColor]::Blue
#$GitPromptSettings.AfterStatus.ForegroundColor = [ConsoleColor]::Blue


# Encoding
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$env:JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF-8'


# Configuration
# Color
# Dracula readline configuration. Requires version 2.0, if you have 1.2 convert to `Set-PSReadlineOption -TokenType`
Set-PSReadlineOption -Color @{
"Command" = [ConsoleColor]::Green
"Parameter" = [ConsoleColor]::Gray
"Operator" = [ConsoleColor]::Magenta
"Variable" = [ConsoleColor]::White
"String" = [ConsoleColor]::Yellow
"Number" = [ConsoleColor]::Blue
"Type" = [ConsoleColor]::Cyan
"Comment" = [ConsoleColor]::DarkCyan
}

### Option ###
#禁用 PowerShell 提示音
Set-PSReadlineOption -BellStyle None
# 设置预测文本来源为历史记录,(推荐)
# Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionSource HistoryAndPlugin # -PredictionViewStyle ListView # Optional
Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { Invoke-FzfTabCompletion }
# 设置 Tab 为菜单补全显示所有选项的可导航菜单和 Intellisense,(推荐)
# Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
# 点击 Tab 时补全
# Set-PSReadLineKeyHandler -Key Tab -Function Complete

### shortcuts ###
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'
# 每次回溯输入历史,光标定位于输入内容末尾
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
# 设置 Ctrl+d 为退出 PowerShell
Set-PSReadlineKeyHandler -Key "Ctrl+d" -Function ViExit
# 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo
# 设置C-u
Set-PSReadLineKeyHandler -Key "Ctrl+u" -Function BackwardDeleteLine
Set-PSReadLineKeyHandler -Key 'Ctrl+f' -Function AcceptSuggestion
# 设置向上键为后向搜索历史记录
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
# 设置向下键为前向搜索历史纪录
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward


### functions definitions ###
function code. {
code $pwd
}
function e. {
e $pwd
}
function e($path) {
explorer $path
}
function setproxy {
$env:HTTP_PROXY="http://127.0.0.1:2080"
$env:HTTPS_PROXY="http://127.0.0.1:2080"
}
function StartPg {
# Start-Process "cmd.exe" -ArgumentList "/c start /min pg_ctl start" -NoNewWindow
# Start-Sleep -Seconds 1
# nircmd win hide ititle "pg_ctl"
pg_ctl start &
# Start-Process "pg_ctl.exe" -ArgumentList "start" -WindowStyle Hidden
}
function touch {
param ($filename)
New-Item -Path $filename -ItemType file -Force
}
function ya {
$tmp = [System.IO.Path]::GetTempFileName()
yazi $args --cwd-file="$tmp"
$cwd = Get-Content -Path $tmp
if (-not [String]::IsNullOrEmpty($cwd) -and $cwd -ne $PWD.Path) {
Set-Location -Path $cwd
}
Remove-Item -Path $tmp
}


#### common aliases ####
#禁用 PowerShell where
del alias:where -Force
remove-item alias:R
#实现 Bash 别名
New-Alias -Name np -Value notepad
New-Alias -Name vi -Value vim
New-Alias -Name which -Value Get-Command
New-Alias -Name python3 -Value python
New-Alias -Name pgs -Value StartPg

UTF-8 with / without BOM ?

当初微软选择了 UTF-16 作为内部的 Unicode 编码。这个特性硬编码到了当初许多代码,现在显然不可能再改了。

其它操作事实上都是对「选择了 UTF-16」带来的连带结果。

首先,UTF-16 与 ASCII 不兼容,而现存的文档中依然存在大量的 ASCII,那么就必然需要处理:怎样判断是不是 UTF16 编码集,不是 UTF16 的时候我们应该把编码集当成什么编码集的问题。为了解决前一个问题,微软规定了使用 BOM 来判定 unicode 文件,为了解决后面一个问题,微软定义了「非 unicode 的默认字符集」概念。

所以微软就自己形成了一套规则:有 BOM 的才是 Unicode,无 BOM 的则认为它属于「非 unicode 默认字符集」。

BOM 是什么东西呢?BOM 是字节序标志,它标识了多字节编码中大端与小端的位置。

--

然而,UTF-8 基于跟 UTF-16 不一致的理念,首先 UTF-8 是基于单字节的字节流编码,由于它是单字节,所以不需要字节序标识,也就不需要 BOM。

节选自https://www.zhihu.com/question/24103924/answer/1291531612

UTF-8 和 UTF-8 BOM 之间的区别是BOM 编码的 UTF-8 字符串将从 EF BB BF 这三个字节开始。

节选自 UTF-8 和 UTF-8 with BOM 有什么区别?

BOM 基本没有必要:

as others have mentioned, it is neither sufficient nor necessary to have a BOM to detect that something is UTF-8: 正如其他人提到的,使用 BOM 来检测某些内容是 UTF-8 既不充分也没有必要:

  • It is not sufficient because an arbitrary byte sequence can happen to start with the exact sequence that constitutes the BOM. 这是不够的,因为任意字节序列可能恰好以构成 BOM 的确切序列开始。

  • It is not necessary because you can just read the bytes as if they were UTF-8; if that succeeds, it is, by definition, valid UTF-8. 没有必要,因为您可以像读取 UTF-8 一样读取字节;如果成功,则根据定义,它是有效的 UTF-8。

  • cat won't give you a clean result, a result that has BOM only at the start. If you meant that, then that's because cat works at the byte level, not at the interpreted contents level, and in similar fashion cat can't deal with photographs, say. Still it doesn't do much harm. That's because the BOM encodes a zero-width non-breaking space. cat 不会给你一个干净的结果,一个只在开始时有 BOM 的结果。如果您的意思是这样,那是因为 cat 在字节级别工作,而不是在解释的内容级别工作,并且以类似的方式 cat 无法处理照片。但它仍然没有造成太大伤害。这是因为 BOM 编码了零宽度不间断空格。注:cat重定向到另一个文件会写入BOM字符。

  • Another problem with BOM... regexes don't recognize it as the beginning of the string or even the beginning of a line BOM 的另一个问题... 正则表达式不能将其识别为字符串的开头,甚至不能识别为行的开头

  • The BOM is Unicode character ZERO WIDTH NO-BREAK SPACE. A file which contains only a BOM is not empty, it contains one normal (but invisible) character. In a text file you can put as many ZERO WIDTH NO-BREAK SPACE characters as you like. BOM 是 Unicode 的 ZERO WIDTH NO-BREAK SPACE字符 。仅包含 BOM 的文件不是空的,它包含一个普通(但不可见)字符。在文本文件中,您可以根据需要放置任意数量的零宽度无间断空格字符。

  • BOM breaks scripts BOM 破坏脚本

    任何其他需要由解释器运行的可执行文件 - 都以 shebang 行开头,如下所示:

    #!/bin/sh
    #!/usr/bin/python
    #!/usr/local/bin/perl
    #!/usr/bin/env node

    It tells the system which interpreter needs to be run when invoking such a script. If the script is encoded in UTF-8, one may be tempted to include a BOM at the beginning. But actually the "#!" characters are not just characters. They are in fact a magic number that happens to be composed out of two ASCII characters. If you put something (like a BOM) before those characters, then the file will look like it had a different magic number and that can lead to problems. 它告诉系统调用此类脚本时需要运行哪个解释器。如果脚本以 UTF-8 编码,人们可能会想在开头包含 BOM。但实际上是 “#!” 字符不仅仅是字符。它们实际上是一个神奇的数字,恰好由两个 ASCII 字符组成。如果您在这些字符之前放置某些内容(例如 BOM),那么该文件将看起来像是具有不同的幻数,这可能会导致问题。

  • BOM is illegal in JSON JSON 中的 BOM 不合法

    Not only it is illegal in JSON, it is also not needed to determine the character encoding because there are more reliable ways to unambiguously determine both the character encoding and endianness used in any JSON stream (see this answer for details). 它不仅在 JSON 中是非法的,而且也不需要确定字符编码,因为有更可靠的方法可以明确确定任何 JSON 流中使用的字符编码和字节序(有关详细信息,请参阅此答案)。

    节选自 What's the difference between UTF-8 and UTF-8 with BOM?

  • GCC 4.3.3~4.4.0 (未测试具体版本)后支持 UTF-8 with BOM

  • GCC 5 开始支持标识符(变量名、函数名)中的 UCN,GCC 10 以后支持 UTF-8 作为标识符 GCC 编译带有 BOM 的 UTF-8 源文件?

  • chcp 65001 将活动代码页更改为 UTF-8 代码页,但是 cmd 和批处理解释器都不关心 BOM,见

  • Windows 经典记事本在使用 UTF-8 编码保存新创建的文件会自动保存带有 BOM 的文件。 win11 新 notepad 不会这么做,而是默认保存 UTF-8 无 BOM 编码。

  • 如果主要使用 Windows 应用程序和 Windows PowerShell,则应优先使用诸如具有 BOM 的 UTF-8 或 UTF-16 这类编码。

  • 仅当软件的兼容性绝对重要时才使用 BOM。归根结底,唯一真正遇到问题的文件是 CSV。根据程序的不同,它要么必须有 BOM,要么不能没有 BOM。例如,如果在 Windows 上使用 Excel ,如果想顺利打开它而不需要导入数据,则须使用 BOM 对其进行编码。另一种方式是用导入数据,或者打开方式。

特性和历史遗留问题之 cmd 设置代码页为 utf-8

彻底搞懂 Windows 控制台的设置

科普:不知道什么是注册表?

引用知乎上的回答:

作者:九鲤湖太极湖 链接:https://www.zhihu.com/question/35298329/answer/2531499419

 

注册表就是只服务 Windows 系统的核心数据库,所以 linux 和 unix 是没有的,在 Windows 里也是只给操作系统使用,虽然注册表不是像 mysql Oracle 那种用来做软件开发的数据库,但是功能是基本是大差不差的,注册表就是要给操作系统提供数据库支持,记录的东西比较杂,包括普通软件,系统软件,硬件,启动程序的路径,配置参数,状态和信息,依赖关系等等,如果你接触过数据库软件你就很容易明白。

注册表的具体作用举几个个例子:

  1. 比如在网页的百度云下载时候会调用安装在计算机的百度云软件进行下载,这就是因为百度云在安装时候向注册表中增加了自己的信息,浏览器便可通过注册表找到百度云的启动程序路径启动程序;

  2. 因为软件在安装时会向注册表添加数据,所以就可以通过注册表修改注册表的数据,一些网上的骚操作就是这个原理,当然能做什么花活取决于软件添加什么字段;

  3. 有些软件需要依赖 windows 提供的基础库,比如你装游戏的时候要你装 vc6.0++ .net,没有的话就无法启动也是这个原因,

  4. 还有一个反向的例子,就是所谓绿色版软件,绿色软件会自带依赖库,不需要注册表,所以这类软件时不会被系统找到的,相当于一个黑户。

注册表除了存储用户的软件信息,也存储了操作系统的中各种软件和服务信息,这也就是注册表不明白不要乱动的原因,如果是动的是用户自己的软件信息还好说,顶多就是损失些功能,但是如果不小心动的是关于系统的信息,那死状就很难看了。所以注册表一直是 windows 的一个雷,也有不少黑客喜欢搞一下注册表

命令提示符启动时使用 AutoRun 执行命令

注册表计算机\HKEY_CURRENT_USER\Software\Microsoft\Command Processor 中有可扩展字符串键值 AutoRun,值可以写一些 hock 和命令,如 conda 使用这个来不添加 PATH 在 cmd 中调用

if exist "D:\programs\conda\condabin\conda_hook.bat" "D:\programs\conda\condabin\conda_hook.bat"

这里添加chcp 65001使 utf-8 为默认编码,> nul 为重定向输出内容,即不输出Active code page: 65001&& 是当前面的命令执行成功执行下个命令。

chcp 65001 > nul && if exist "D:\programs\conda\condabin\conda_hook.bat" "D:\programs\conda\condabin\conda_hook.bat"

这样可以将cmd编码默认修改为 UTF-8


cmd多命令

&  顺序执行多条命令,不管命令是否执行成功(其他shell基本都是 ; )
&& 顺序执行多条命令,前面的命令错误则不执行后面的命令
|| 顺序执行多条命令,碰到执行正确的命令后将不执行后面的命令

*可能在 Windows Terminal 中再次发生改变

注册表HKEY_CURRENT_USER\Console\可以修改默认选项,如果有装 vs 你也可以看到相关选项,如果什么都没有可以自己创一个

举例来说,在Console下,可以有这些

Console
├── ConEmu
├── C:_Program Files_Microsoft Visual Studio_2022_Community_Common7_IDE_CommonExtensions_Microsoft_Terminal_ServiceHub_os64_OpenConsole.exe
├── C:_Program Files_Microsoft Visual Studio_2022_Community_Common7_IDE_CommonExtensions_Platform_Debugger_VsDebugConsole.exe
├── C:_Program Files_PowerShell_7_pwsh.exe
├── D:_Scoop_apps_cmder_current_vendor_conemu-maximus5_ConEmu_ConEmuC64.exe
├── %%Startup
├── %SystemRoot%_system32_cmd.exe
├── %SystemRoot%_system32_conhost.exe
├── %SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe
└── %SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe

没有修改过的电脑没有%SystemRoot%_system32_cmd.exe的项,对Console右键添加新项即可

修改HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe中的CodePage可以更改默认编码在cmd中没有 CodePage 的,可以鼠标右键 -> 新建 -> DWORD (32 位) 值,创建即可。修改值为65001可改为 utf-8 .

在win11中,Windows terminal(见下文)会成为默认终端,如果使用 wt 作为终端,HKEY_CURRENT_USER\Console\中的配置就不会加载 。

https://github.com/microsoft/terminal/issues/1852: 您无法使用控制台注册表项设置 WT 的控制台代码页,因为wt 不是控制台应用程序。这些key仅适用于在控制台内部运行的事物,不适用于控制台主机的事物。

有生之年能支持的特性:

默认情况下,终端应强制伪控制台主机进入 UTF-8 代码页: Unix 上的一些现代应用程序始终使用 UTF-8。Cygwin/MSYS 也使用 UTF-8(它们使用诸如LANG之类的环境变量)


使用 cmder 而不是原始 cmd

cmder 中的 clink 支持配置文件。


现代 Windows utf-8:

在 Windows 10 的 1809 版本中,通过转到系统的Language settings、选择Administrative language settings、单击Change system locale...并选中该Beta: Use Unicode UTF-8 for worldwide language support框,然后重启电脑,永久解决这个问题。

这样它适用于所有应用程序,甚至是那些不从命令提示符启动的应用程序

7-ZIP 和 WinRAR 以及 Windows 资源管理器 打开 GBK 编码的压缩文件会乱码

chm 帮助文件查看器打开中文乱码

解决方法:配合 LocaleEmulator 使用,不正常的就模拟 gbk


Cmd 死亡的谣言被过分夸大了


Windows terminal

微软官方出品终端。

Windows Terminal 是一款面向命令行用户的新型、现代、功能丰富、高效的终端应用程序。它包括 Windows 命令行社区最常请求的许多功能,包括对选项卡、富文本、全球化、可配置性、主题和样式的支持等。

  • 选项卡,用于在单个窗口中保存多个实例

  • ANSI VT 序列支持

  • UTF-8 和 UTF-16(包括 CJK 表意文字和表情符号)支持

  • DirectWrite 硬件加速文本渲染

  • 窗口透明效果

  • 主题、背景图像和选项卡颜色设置

  • ......

Windows 控制台主机

Windows 控制台主机conhost.exe是 Windows 最初的命令行。它还托管 Windows 的命令行基础结构和 Windows 控制台 API 服务器、输入引擎、渲染引擎、用户首选项等。此存储库中的控制台主机代码是 conhost.exe构建 Windows 本身的实际源代码。

自 2014 年获得 Windows 命令行所有权以来,该团队向控制台添加了多项新功能,包括背景透明度、基于行的选择、对ANSI / 虚拟终端序列的支持、24 位颜色伪控制台(“ConPTY”) ), 和更多。

但是,由于 Windows 控制台的主要目标是保持向后兼容性,因此我们无法添加社区(和团队)过去几年一直想要的许多功能,包括选项卡、unicode 文本和表情符号。

这些限制促使我们创建了新的 Windows 终端。

官方文档:An overview on Windows Terminal | Microsoft Learn

使用 Ctrl+, 打开 Windows 终端设置。在“启动”设置选择新的 PowerShell 版本作为默认终端应用程序。

  • 修改cmd在wt中的codepage

    在Windows 终端设置中打开Command Prompt(或 命令提示符),将命令行修改为%SystemRoot%\System32\cmd.exe /k chcp 65001 >NUL。但是在其他地方输入 cmd 实现默认 utf-8 得配合AutoRun修改(也会改变其他的shell的codepage)。

    长期 VS导致的

gsudo

scoop install gsudo

gsudo 在当前控制台窗口或新控制台窗口中以提升的权限运行命令,或提升当前 shell。

  • 用法:在需要管理员权限的命令前添加 sudo

WSL

why use wsl:

  • linux 环境

  • powershell 的交互体验不如 linux 成熟和方便,可以使用 wsl 来增强 windows 命令行交互体验

使用

wsl --install

会自动安装Ubuntu 和 wsl

使用

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

启用 wsl1

WSL1 实时翻译 Linux 系统调用,WSL2 是轻量 Linux 虚拟机。

常用命令

设置默认 wsl 版本

wsl --set-default-version 2

列出所有 wsl 和对应版本

wsl --list --verbose

wsl -l -v

更改指定 wsl 的版本

wsl --set-version <distribution name> <versionNumber>

wsl --set-version Ubuntu 2

**更多命令见 wsl --help

请勿使用 Windows 应用程序和工具更改 Linux 文件

 

常用软件

PowerToys

微软官方工具集

常用功能:

  • 置顶窗口

  • 图像大小调整器

  • 查找鼠标位置

  • 唤醒(保持电脑唤醒状态)

  • 环境变量(图形化编辑)

  • 注册表预览

  • Hosts 编辑

  • PowerRename

  • PowerToys Run

    • 搜索应用程序、文件夹或文件

    • 搜索运行的进程(以前称为Window Walker

    • 具有键盘快捷方式的可单击按钮(如以管理员身份打开打开包含文件夹

    • 使用 >调用 Shell 插件(例如,> Shell:startup 将打开Windows 启动文件夹)

    • 使用计算器执行简单计算

  • ......

浏览器

Google Chrome / Edge

原版 chrome

scoop install googlechrome

scoop 的 Google Chrome 是使用快捷方式指定user profile 参数实现的便携式安装,

--user-data-dir="${SCOOP}\apps\googlechrome\current\User Data"

chrome++,这个插件通过注入dll来增强chrome的相关体验,但是可能是不安全的

  • 功能

    • 双击关闭选项卡。

    • 右键单击可关闭选项卡。(按住 Shift 键可显示原始菜单。)

    • 鼠标悬停可滚动选项卡栏。

    • 右键单击并滚动选项卡栏。

    • 使用热键快速隐藏浏览器窗口(老板键)。

    • 便携设计:程序放在App目录下,数据存放在Data目录下(与原有数据不兼容;可以重装系统或换电脑,不会丢失数据)。

    • 允许使用 ini 文件配置功能。

    • 允许自定义 Chromium 启动参数。

  • 将 version.dll 放在与 chrome.exe 相同的目录中。完成安装

  • 用 scoop 更新 chrome 后记得迁移 version.dll 和 chrome++.ini

第三方chrome

  1. Edge

    windows10 自带,chromium 内核,微软账号同步,国内同步方便

  2. centbrowser

    推荐,不折腾,使用谷歌账号同步,但是更新缓慢,内核版本不高

  3. arc

插件推荐

  1. Proxy SwitchyOmega 网络调试代理插件

  2. Charset 改变页面的编码,Google Chrome在55版本以后删除了手动设置网站编码的功能。但是在部分设置不规范不正确的网站,新版浏览器无法准确判断其使用的编码,导致网站显示乱码

  3. Global Speed: 视频速度控制

  4. 沉浸式翻译: 双语对照网页翻译

  5. OneTab 减轻标签页混乱现象

  6. Imagus 鼠标指针悬停在链接或缩略图上时直接在当前页面的弹出视图上显示这些图片、HTML5 视频/音频和内容专辑。

  7. uBlock Origin 不只是一个广告拦截工具

Firefox

 

Git for Windows

scoop install git

开发和逛GitHub必备

“Git for Windows”基于Msys2和 MinGW,包括 git 以及各种附加软件。包括:

  • bash(Windows 10 和 11 已附带,wsl)

  • ssh(现在也包含在 Windows 10 和 11 中)

  • Core utilities(是 GNU/Linux 系统的基本工具)。GNU coreutils 包含许多基本工具的实现,如sed, awk, ls, cp, rm(wsl中可用)

  • vim

  • mintty(终端模拟器)

将 git bash 添加到右键打开(scoop安装完后会有提示:To add context menu entries, run:)

C:\Scoop\apps\git\current\install-context.reg

 

MSYS2 / MinGW(-w64)

MinGW 是 Minimalist GNU for Windows 的缩写。 MinGW的想法是提供一个在Windows上构建跨平台应用程序的开发平台。至少有两个项目实现了这个想法:

  • 最初的 MinGW 项目,有时称为 mingw.org

  • 和 MinGW-w64 项目。

MinGW-w64 项目本身并不旨在成为一个软件发行版。有多个版本的 mingw-w64 工具链和多个使用 MinGW-w64 构建的软件发行版。mingw-w64 官网推荐MSYS2 / MingW-W64-builds(4 (gdb, libiconf, python, zlib))/ WinLibs.com(包管理器在开发中) / w64devkit(8 (busybox, cppcheck, ctags, gdb, make, nasm, pkg-config, vim))/ LLVM-MinGW(make, Python)

sourceforge上的在线安装包不推荐使用

科普文章:MinGW vs MinGW-W64及其它 (有些内容是过时的)

 Windows 默认安装自然不带 MinGW 运行时环境,所以除了编译出来的程序和可能附带的数据,一些dll是要准备好的——除非有耐心折腾全部静态链接。

scoop 安装会将对应的 mingw 发行版(不包括 msys2)的bin目录添加到PATH,方便全局使用。

以下是比较流行的 mingw-w64 发行版的介绍:

MSYS2

MSYS2 是 Windows 的软件分发和构建平台。它提供了类 Unix 环境、命令行界面和软件存储库,使在 Windows 上安装、使用、构建和移植软件变得更加容易。这意味着 Bash、Zsh、Autotools、Make、GCC、GDB...都可以通过 Pacman(Arch Linux 的包管理器)轻松安装。MSYS2 是最好的 MinGW-w64 发行版之一,始终拥有最新的 GCC 版本等。

官网: https://www.msys2.org/

安装msys2:

scoop install msys2

详细配置可以看我写的这篇文章:

vscode c/c++ MinGW/MSYS2 配置

默认动态链接,在没有对应 dll 时运行不起来。需要静态链接或者附上对应 dll。

Mingw-builds

据称是 msys2 的人员维护的

GitHub: https://github.com/niXman/mingw-builds-binaries/releases

有在线安装器:https://github.com/Vuniverse0/mingwInstaller

安装:

scoop install mingw

WinLibs

官网:https://winlibs.com

GitHub: https://github.com/brechtsanders/winlibs_mingw

作者更新很勤,有多种工具链套装可供选择。目前称在开发包管理器。

添加 bucket: dorado

scoop bucket add dorado https://github.com/chawyehsu/dorado

安装

# ucrt
scoop install winlibs-mingw-ucrt
scoop install winlibs-mingw-llvm-ucrt
# msvcrt (old mingw clain)
scoop install winlibs-mingw-msvcrt

nuwen

官网:https://nuwen.net/mingw.html

GitHub: https://github.com/StephanTLavavej/mingw-distro

有些年头没有更新了,作者说会更新的。(咕咕咕)

最近突然诈尸更新了(震惊)

包含的工具链很多,如rust工具链 uutils/coreutils ripgrep甚至包括了 git(git 已被移除)。作者移除并推荐自行安装:

I recommend installing 7-Zip, gh, and git; I don't bundle them in the distro anymore.

在 bucket: dorado 中

scoop install dorado/nuwen-mingw-gcc

或者在 bucket: main 中安装:

scoop install main/mingw-nuwen

tdm-gcc

很稳定(几年更新一次)(划掉)

安装:

scoop install tdm-gcc

w64devkit

w64devkit.exe ,它启动一个控制台窗口,其中包含已配置并准备就绪的环境。

Github: https://github.com/skeeto/w64devkit

scoop install w64devkit

优势:

  • 专注于静态链接所有运行时组件。运行时针对大小进行了优化。

  • 无需安装。可以以任何用户在任何地方运行它。

  • Fortran 支持

  • 包含类 unix 工具,集成了 busybox-w32

A guide to Windows application development using w64devkit (nullprogram.com)


参考:

What are MSYS2 environments? How do I pick one? - Stack Overflow

Setting up Git Bash / MINGW / MSYS2 on Windows | pascallandau.com

https://www.mingw-w64.org/downloads/#winlibscom

 

VScode

scoop install vscode

需添加scoop (bucket: extras)

全功能编辑器 (除了java)

这篇文章是 VScode 的相关配置:VScode 扩展推荐和配置

C/C++

选择很多,坑也很多,以下环境均统一为 UTF-8 编码:

MSVC

Using UTF-8 as the internal representation for strings in C and C++ with Visual Studio

文件编码

https://stackoverflow.com/questions/41335199/how-to-config-visual-studio-to-use-utf-8-as-the-default-encoding-for-all-project

Visual Studio 会根据本地编码保存为 GBK 或 UTF-8 BOM,而没有提供默认为 UTF-8 的选项,

如果想要使用 UTF-8,需添加高级保存选项手动保存(指定为 utf-8 无签名(无 BOM))或通过在项目目录中添加 .editorconfig文件来指定编码

end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 4

指定编码后,因为编码 utf-8 无 BOM ,需添加编译器选项

/source-charset: utf-8 使 cl.eze(MSVC) 知道文件是 UTF-8 without BOM编码

默认情况下,Visual Studio 会检测字节顺序标记(BOM)来确定源文件是否采用编码的 Unicode 格式,例如 UTF-16 或 UTF-8。如果未找到字节顺序标记,则假定源文件是在当前用户代码页中编码的,除非您使用 /utf-8/source-charset 指定了代码页选项。MSVC compiler options /utf-8

/execution-charset: utf-8 使输出到终端的编码为 utf-8, 在VS的调试控制台中需要指定注册表的 AutoRun\ 或当 wt 不是默认终端时也可以指定 Console\相关 CodePage 使得默认控制台编码为 utf-8

/utf-8: 指定使用 UTF-8 编码的源字符集和执行字符集,相当于 /source-charset+/execution-charset

配置和平台都需要指定一遍

见:https://www.cnblogs.com/mechanicoder/p/16894144.html

调试:utf-8 字符串正确显示:https://www.blurredcode.com/2022/04/8a85b633/

终端编码:

conhost:修改C:_Program Files_Microsoft Visual Studio_2022_Community_Common7_IDE_CommonExtensions_Platform_Debugger_VsDebugConsole.exe 的 CodePage

如果不想使用 AutoRun 指定编码(在wt中的调试控制台为系统OEM编码)可以通过在程序中添加以下几行:

// https://stackoverflow.com/questions/7035023/stdmax-expected-an-identifier
#define NOMINMAX // 防止windows.h中的min和max宏与std::min和std::max冲突
#include <Windows.h>
int main() {
SetConsoleOutputCP(CP_UTF8);
std::numeric_limits<std::streamsize>::max(); //这里如果没#define NOMINMAX 会有问题
// 通过括号可以处理这个问题
// 这个额外的括号组告诉编译器,max应该被视为一个成员函数,而不是一个宏。
// 函数两边加上括号,以防止它被视为宏调用
(std::numeric_limits<std::streamsize>::max)();

}

MinGW-w64

MinGW-w64 可以搭配 VScode 和 CLion 等使用(VS 中使用 CppProperties.json 也可)

CLion 编码问题:

 

Java

JDK

需添加scoop bucket: java

scoop bucket add java

JDK(Java Development Kit) 是一个软件开发工具包,用于开发Java程序。它包括 JRE 以及许多 Java 开发工具和库。这包括用于将 Java 代码转换为可执行程序的 Java 编译器,以及调试器、分析器等其他工具。

OpenJDK 是 JDK 的开源版本。它包含与 JDK 相同的工具和库,但它是免费提供的,任何人都可以修改和重新分发。这些版本只会更新 6 个月,包括LTS 版本。结论:不要使用 Oracle 构建的 OpenJDK,特别是打算使用 LTS 版本。

OpenJDK 和 Oracle JDK 是通过了 TCK 认证的相同 Java 规范的实现。Oracle 提供了 OpenJDK 的商业版本,该版本基于与 OpenJDK 完全相同的源:Oracle Java SE 开发工具包 (JDK)。 Oracle 为这些版本提供定期更新和安全补丁。版本 11 到版本 16 版本是根据 Oracle Java SE 的 Oracle 技术网络许可协议发布的,需要付费许可证才能在生产中使用。这就是 OpenJDK 出现许多新发行版的原因。结论:在咨询律师之前不要使用 Oracle Java SE 开发工具包 (JDK)。

大多数 JDK 供应商都是在 OpenJDK 之上编写的,通过对组件进行一些调整(主要是替换许可的专有部件/替换为仅适用于特定操作系统的更高性能项目)组件,而不会破坏 TCK 兼容性。

许多厂商实现了Java规范并获得了TCK的通过。例如 Azul Zulu、Adoptium Eclipse Temurin 。

Adoptium Eclipse Temurin

Eclipse Adoptium是Eclipse基金会旗下的顶级项目。Eclipse Temurin 构建是高质量、供应商中立的,并且在宽松的许可证下经过 TCK 测试。建议采用 Eclipse Temurin OpenJDK 构建。

Azul Zulu

Azul Systems, Inc. 专注于专业 Java 技术和 JDK 的商业支持。 Azul 拥有很高的行业声誉,并参与各种工作组来发展 Java 平台。Azul 为许多操作系统和架构提供名为 Azul Zulu 的开源 OpenJDK 版本。此外,Azul 还提供满足特殊要求的构建,例如精简的 JRE 和包括 OpenJFX 的构建。

BellSoft Liberica JDK

与 Azul 类似,BellSoft 专注于专业 Java 技术和 JDK 的商业支持。此外,BellSoft 拥有很高的行业声誉,并参与各种工作组来发展 Java 平台。BellSoft 为几乎所有操作系统和架构提供了名为 Liberica JDK 的开源 OpenJDK 版本。流行的 Spring Boot 框架选择 Liberica JDK 作为其构建包的运行时。

参考:Which Version of JDK Should I Use?

Maven

gradle

IDE: IntelliJ IDEA

java 必备 IDE

Python

scoop install python

默认会安装最新稳定版本

指定版本 如3.10 则 scoop install python310 (指定版本需 bucket: versions,包含2.7,3.5 - 最新版本 (2024))

scoop bucket add versions

python包管理

科学计算 和 深度学习通常使用conda 或 winpython 等

相对于其他主流的虚拟环境管理工具而言,conda 在 Python 开发环境中的主要特点是它不依赖于系统中已存在的 Python 版本。因此,conda 具有高度的独立性和强大的跨版本支持,至今仍然是多版本管理中难以匹敌的工具。然而,与此同时,conda 在虚拟环境管理方面显得相当“强硬”。这一特性同样源于其卓越的跨版本支持。通过 conda,您可以轻松地在创建虚拟环境时仅使用一个参数选择任何一个 Python 版本,即使系统中未包含该版本的 Python。然而,这也带来了一种极端的虚拟环境实现方式,每个虚拟环境都包含完整的 Python,即使在同一系统中已存在相同版本的 Python 解释器,conda 也会为该环境创建一个新的解释器。因此,conda 的虚拟环境与主流虚拟环境存在显著差异,也导致了其最大的缺点之一——极大地浪费磁盘空间。

当然conda 相较于其他虚拟环境的管理器来说,其上手难度也相对更低一些,仅需要学会 创建环境、进入环境、退出环境、删除环境 即可轻松使用 conda 了。

首先得添加环境变量使用conda init 初始化 conda 的配置或者手动到对应shell的profile添加配置信息。

当运行conda init时,它会执行以下步骤:

  1. 检测shell类型: conda init会检测当前使用的shell类型,例如bash、zsh等。

  2. 生成配置信息: 根据检测到的shell类型,conda init会生成相应的配置信息,这些信息包括环境变量设置、路径配置等。

  3. 将配置信息写入配置文件: 接下来,conda init会将生成的配置信息写入你shell的配置文件中,以确保每次打开一个新的终端时,conda相关的设置都能够正确加载。

  4. 激活conda环境: 在配置文件中,conda init也会添加一行命令来激活基础(base)环境,这样每次打开终端时都会自动激活conda环境。

参考: conda init and conda activate — conda 23.11.1.dev56 documentation

https://zhuanlan.zhihu.com/p/554965293

创建环境:

conda create --name my_advanced_env python=3.8 numpy pandas matplotlib

这将创建一个名为 "my_advanced_env" 的环境,并安装 Python 3.8、NumPy、Pandas 和 Matplotlib。

进入环境:

conda activate my_advanced_env

退出环境:

conda deactivate

查看所有环境:

conda env list

显示所有已创建的 Conda 环境列表。

查看当前环境中已安装的包:

conda list

删除环境:

conda deactivate
conda remove -n my_advanced_env --all

彻底删除名为 "my_advanced_env" 的环境及其所有相关的包和文件。

conda 可选择 anaconda 或 miniconda 。

由于 Miniconda 相对较为精简,与 Anaconda 相比省略了图形化管理界面。因此,对于那些可能害怕使用命令行的用户,可以选择使用 Anaconda 来进行更直观的图形化操作。然而,Conda 的使用方法非常简单,而 Anaconda 的图形用户界面实际上并不够友好且可能会出现卡顿,因此仍然建议使用 Miniconda 并借助命令行工具进行操作。Anaconda 和 Miniconda 在命令行操作方面是一致的,因此这里不会分别进行演示。

WinPython 是一个免费的、开源的、可移植的 Python 编程语言的发行版,适用于 windows8/10 以及科学和教育用途。Winpython 采用集成的 WinPython 包管理器 WPPM 帮助安装、卸载或升级 Python 包。Winpython 强调便携性,被做成绿色软件,不写入注册表,安装其实就是解压到某个文件夹,移动文件夹甚至放到 U 盘里在其他电脑上也能用。

PDM

 

PIPX

scoop install pipx
pipx ensurepath

https://github.com/pypa/pipx

在隔离环境中安装和运行 Python 应用程序。

pip 是一个通用包安装程序,适用于库和应用程序,没有环境隔离。 pipx 专为应用程序安装而设计,因为它增加了隔离性,但仍然使应用程序在您的 shell 中可用:pipx 为每个应用程序及其关联的包创建一个隔离的环境。

 

IDE: pycharm /vscode

 

.Net

使用宇宙第一IDE Visual Studio / Rider

 

 

 

数据库

postgreSQL

scoop install postgresql

启动数据库需使用pg_ctl strat 或者pg_ctlregister 成 Windows Service

后台运行需要使用在power shell中使用 pg_ctl start & (这里的&是 Background operator )

或者在power shell中Start-Process "pg_ctl.exe" -ArgumentList "start" -WindowStyle Hidden

或者不使用powershell 安装nircmd

运行start /min pg_ctl start && timeout /t 1 /nobreak > nul && nircmd win hide ititle "pg_ctl" $T echo server started

 

mysql

 

MongoDB

 

Node.js

常用工具;运行时;包管理

node后端代码或启用前端工具链,安装npm包。Node.js (nodejs.org)

 

npm包管理

 

PNPM

 

TypeScript

编写ts代码

pnpm add typescript -D`或全局安装`pnpm add -g typescript

 

TS-Node

直接执行ts代码

pnpm add ts-node -D`或全局安装`pnpm add -g ts-node

 

lua

设计简洁的动态语言

scoop install lua

 

一些好用的 cli :

vim

scoop 安装在 versions bucket 里的vim-tux,main bucket版本比较老

scoop install vim-tux

fzf

less

scoop install less

 

bat

cat,需要 less

scoop install bat

 

eza

ls

scoop install eza

 

fd

find

scoop install fd

 

jq

scoop install jq

 

ripgrep

grep

scoop install ripgrep

 

bottom

scoop install bottom

 

helix

scoop install helix

开箱即用,vim 类似的键位

yazi

命令行文件管理器,vim风格

scoop install yazi

powershell profile 中有 yazi 的 wrapper 命令 ya,可以提供改变目录的功能。

文档:Installation | Yazi (yazi-rs.github.io)

需要 git-for-windows 的 file ,scoop 的 file 不支持 utf-8,使用scoop shim 添加到path中

scoop shim add file C:\Scoop\apps\git\current\usr\bin\file.exe # 记得修改 Scoop 路径

 

 

WinSCP

ssh配合使用文件传输

 

SwitchHosts

配合 Github520:https://github.com/521xueweihan/GitHub520 使用

管理员权限运行软件,添加远程配置:

下面的地址无需访问 GitHub 即可获取到最新的 hosts 内容:

文件:https://raw.hellogithub.com/hosts
JSON:https://raw.hellogithub.com/hosts.json

设置一个小时刷新。

Deno

用途:执行ts代码,但是用了不和node兼容的方式,初学者应该用不到,但是可以了解

Pandoc

markdown转docx

MikTex

随用随装的Latex环境Home (miktex.org)

octave

 

 

qbittorrent-enhanced

qBittorrent 增强版,BT 下载

添加bucket dorado:

scoop bucket add dorado https://github.com/chawyehsu/dorado

安装:

scoop install qbittorrent-enhanced

LocaleEmulator

转区工具,用来玩日区游戏或处理老旧软件编码问题。

scoop install locale-emulator

添加到右键方便使用

 

天坑填坑ing...

[FAQ]:

posted @ 2024-02-04 00:11  comsoi  阅读(234)  评论(0编辑  收藏  举报