主要描述 powershell 的 部分 Linux 命令扩展、主题以及提高效率的插件。为了方便后续使用 Git 中附带的 vim 编辑配置文件,此处先介绍部分 Linux 命令扩展。
1. 部分 Linux 命令扩展
使 powershell 使用 grep、awk、which等工具。
需要安装 Git,PATH 中除了 git 所需的 Git
、Git\cmd
之外,额外加入 Git\usr\bin
即可,如我的路径为 D:\Git\usr\bin
,则环境变量如下图1:
(figure 1)
这样就可以使用 grep 等等了,如下面提取 wlan 的 ip (图2):
ipconfig | grep -azio 'wlan.*' | grep -ai 'v4' -m 1 | awk '{print $NF}'
(figure 2)
解释:
grep 参数
-a
: 指定二进制的类型为 text,-z
: 使结束符为文末,而不是换行符,用来全文匹配,-i
: 忽略大小写,-o
: 仅输出匹配部分,-m 1
: 显示第一个匹配。awk: 默认以 空格和 TAB 分割,
'{print $NF}'
表示打印每行分割后的最后一项,$NF
为其内部变量,代表最后一项。
2. vim
使用 Git 中附带的 VIM,其 RUNTIME 在: GitInstalledPath\usr\share\vim\vim82
,其可以自动检测到,故无所配置此项。
用户自定义配置在 $HOME\_vimrc
,写入自己配置即可。
关于 vim 配置有以下三点需要额外增加:
- 关于 Vim E303: Unable to open swap file for “[No Name]”, recovery impossible 问题的解决方案(均测试通过)
- 更改缓存和备份文件目录,引自 Disabling swap files creation in vim 的回答: Set the following variables in .vimrc or /etc/vimrc to make vim put swap (需要手动创建这三个文件夹):
set backupdir=~/.vim/backup// set directory=~/.vim/swap// set undodir=~/.vim/undo//
- 禁止缓存和备份文件,引自 Disable any kind of backup/swap file?:
set nobackup set noswapfile
- 更改缓存和备份文件目录,引自 Disabling swap files creation in vim 的回答: Set the following variables in .vimrc or /etc/vimrc to make vim put swap (需要手动创建这三个文件夹):
- <ctrl+left>与<ctrl+right> 无法以 word 移动解决方案(引自 control-left and control-right not working in vim, within a screen session 的回答 My
.vimrc
in Ubuntu to handle ctrl arrow keys):map <Esc>[1;5A <C-Up> map <Esc>[1;5B <C-Down> map <Esc>[1;5D <C-Left> map <Esc>[1;5C <C-Right> cmap <Esc>[1;5A <C-Up> cmap <Esc>[1;5B <C-Down> cmap <Esc>[1;5D <C-Left> cmap <Esc>[1;5C <C-Right> map <Esc>[1;2D <S-Left> map <Esc>[1;2C <S-Right> cmap <Esc>[1;2D <S-Left> cmap <Esc>[1;2C <S-Right>
- 中文乱码,设置编码即可:
set encoding=utf-8 set fileencoding=utf-8
我的 vim 配置文件蓝奏云链接,下载后自己修改文件名,效果例图3:
(figure 3)
3. 主题
这一部分的主题配置参考自 PowerShell 美化指南 。
以下过程推荐在 powershell 管理员权限下进行,这样会将模块放到全局用户的 C:\Program Files\WindowsPowerShell\Modules
,而不是文档库(一般 C盘是固态盘,文档库所在盘不是固态盘,放在固态盘加载速度会快一点)。
步骤(有需要选择“是否”的,选择“是”):
- 使用 colortool 更改控制台配色方案。colortool 官方下载链接: Color Tool April 2019,iTerm2 配色方案: mbadolato/iTerm2-Color-Schemes,在 schemes 下下载自己喜欢的配色方案,下载后把 colortool 和配色文件放在一起,在当前文件夹打开 powershell,如我选择 DimmedMonokai,则输入以下:
.\ColorTool.exe -b .\DimmedMonokai.itermcolors
输入完成之后右击标题栏 –> 属性 –> 确定。上面文件就可以删除了。
完成之后需要再微调下属性中的背景颜色,否则背景色很奇怪。 -
信任 PS 官方库:
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
- 安装 PSColor 以彩色显示文件列表:
Install-Module PSColor
加载 PSColor,首次加载时需要设置脚本执行策略:
Set-ExecutionPolicy -Scope CurrentUser Bypass # 加载策略更改 Import-Module PSColor # 加载测试 PSColor
- 安装 DirColors 以更改 PSColor 彩色文件列表的配色:
Install-Module DirColors
DirColors 配色方案 seebi/dircolors-solarized,例如我下载 dircolors.256dark,在 $home 路径下新建 dircolors 文件夹,复制配色文件到此处,生效配色方案:
Update-DirColors ~\dircolors\dircolors.256dark
- 命令行主题,类似 ohmyzsh,Powershell 的主题引擎为 JanDeDobbeleer/oh-my-posh,安装:
Install-Module posh-git # 安装 ohmyposh 依赖 Install-Module oh-my-posh # 安装 ohmyposh
配置主题:
Set-Theme desiredTheme
主题在 oh-my-posh 的安装路径的 Theme 下,我的主题是在 Paradox 基础上修改了自己喜欢的颜色以及添加了起始符,点击此处下载。效果如下图4:
(figure 4)
主题和配色需要每次都执行,比较麻烦,此处将其写入到全局启动脚本中(见下面的<6. 启动脚本>),效果如下例图 5:
4. 自动补全
基本需求是可以像 zsh-autosuggestions 那样提示和补全历史命令。
此功能由 PowerShell/PSReadLine issue 687: Fish-like autocompletion 发起讨论,并在 issue 1468: Predictive IntelliSense 中得到实现,有时间的伙伴可以点击链接去查看作者的解答,我这里简述下 1468 中完成的功能:1. 完成提示和补全历史命令;2. 增加动态提示函数以及参数。
将 PSReadLine 更新到 2.1.0-beta1 以上即可:
Install-Module -Name PowerShellGet -Force # 升级 PSGEt
Install-Module -Name PSReadLine -AllowPrerelease -Force # 升级 PSReadLine
在全局启动脚本中(见下面的<6. 启动脚本>)加入快捷键绑定:
Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete
Set-PSReadLineKeyHandler -Key "Ctrl+f" -Function ForwardWord
Set-PSReadLineKeyHandler -Key "Ctrl+b" -Function BackwardWord
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
在加入颜色更改,此处修改提示的颜色为暗绿色(默认的浅灰色在 vscode 暗色主题下阅读困难):
Set-PSReadLineOption -Colors @{ Prediction = '#2F7004'}
效果如下例图6,输入 p 后,会根据输入历史以暗绿色提供建议:
(figure 6)
5. sudo 提权
Linux 终端下比较便捷的一点就是让当前用户临时具有 root 权限,插件 gerardog/gsudo 可以实现 cmd/powershell 的提权,下面内容均取自作者 repo。
通过 powershell 安装:
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
其命令是 gsudo
,在首次执行时其可以提示是否创建 sudo
的软链接。
其特性:
- 默认在当前窗口提权。(参数
-n
可以新打开窗口); - 权限缓存:UAC 弹窗一次后,几分钟内再次提权不再 UAC 弹窗(0.7 版本下我测试未起效);
- 可直接追加操作,如:
gsudo touch testSudo.md
目前已知 BUG:直接追加的操作不支持自定义函数,如: sudo TestUserFunc
会报错。我已经在其 repo 中发起 issue: Cannot call the function defined in profile,作者给的建议是不要在启动脚本放太多自定义函数,因为其会导致加载缓慢,针对提权后调用自定义函数有两种方案:
- 先 sudo,然后再执行自定义函数;
- 在 profile 中定义变量来拆分自定义函数。
6. 启动脚本
综上,此处将文件列表配色、主题加载、自动补全快捷键、自动补全背景色的配置加入全局启动脚本:
- 全局启动脚本位置:
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
,如果没有则自己新建,新建后定义一个变量存储启动脚本位置,方便后续 vim 编辑,此处再加入 hosts 文件的位置:$profile = "C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1" $hostfile = "C:\Windows\System32\drivers\etc\hosts" # 使用 `vim $profile` 编辑启动脚本 # 使用 `vim $hostfile` 编辑 hosts 文件
- 将上面加载文件列表配色、主题的代码写入,如:
#Import-Module DirColors #Import-Module posh-git #Import-Module oh-my-posh Update-DirColors ~\dircolors\dircolors.256dark Set-Theme Paradox_changeColor
- 自动补全快捷键、自动补全背景色的配置,见<4. 自动补全>,此处不再粘贴。
最终我的完整配置文件如下图 7:
(figure 7)
更新:
powerline 2.1.0-beta2 需要设置预测源:
# Prediction from history
Set-PSReadLineOption -PredictionSource History
更多见官方 repo changeLog