stoolbox我的命令行工具箱

Table of Contents

stoolbox 是我的一些shell相关的工具,我不是很喜欢分享大而全的配置文件,因为每个人的个人习惯和配置风格差别都挺大的。所以我把个人配置里一些小函数和功能拆分成单独文件分享在这个项目里,有喜欢的功能就copy过去试试,觉得好用就融入到自己的配置中。

这样独立文件的配置的方式,就方便他人更好的筛选和实验自己需要的功能,而不像那种一下子分享大而全的配置文件那样,还要进入文件仔细看所有配置代码再做筛选。

下面就是一些常用的小功能,我不定时的会更新一下。不过项目里的和博客里的可能会不同步,所以我在博客就介绍几个我使用频率很高的功能。

我目前因为主力机用的是windows的pwsh, 所以下面的脚本都只是在windows中工作的。linux虽然也是我的主力机但脚本的更新频率不是很高,而且功能上也是大同小异,所以暂时就不放上去了。

仅当前目录的模糊搜索

fuzzy_pwd_file_select.ps1

  function TabCompleteCurrentDir () {
    $item = ""
    fd -H -d 1 | fzf | ForEach-Object { $item = $_ }
    [Microsoft.PowerShell.PSConsoleReadLine]::ClearScreen()
    [Microsoft.PowerShell.PSConsoleReadLine]::Insert($item)
}

Set-PSReadLineKeyHandler -Chord Alt+t -ScriptBlock { TabCompleteCurrentDir }

这个脚本用的fzf是一个模糊搜索工具,它自带的按键映射里有一个ctrl+t的快捷键,会搜索当前目录和所有子目录下的目录文件并把名字插入到当前终端的输入中。不过我有时候并不想递归的搜索子目录,所以这脚本就增加了一个 alt+t 的快捷键,只搜索当前层级目录的所有文件和目录,并将选择的结果输出到终端输入中。

命令行拷贝文件列表

gcopy.ps1 gpaste.ps1

gcopy和gpaste是我使用率非常高的函数。cp命令是所有shell中常用的功能,但是这个命令需要输入两个参数源路径和目标路径,才能将文件拷贝过去。很多时候我拷贝文件并不想马上指定目标路径,而是想像图形化界面那样鼠标选择一些文件复制,然后再到到一个文件夹里贴贴这样拷贝过去。gcopy和gpaste模仿的就是图形化复制和贴贴的功能。

gcopy [file1] [file2]
gpaste
gpaste [path1] [path2]

命令行调节声音

sound_volume.ps1

有时候一边听歌曲一边在终端中干活,播放器切换到下一首歌后声音突然变得很大。我既又不想移动鼠标去选声音按钮调整,又不想按键盘上fn+音量键去调整,所以就用这个命令输入sound_volume 然后再用vim风格的上下两个键j和k,j降低音量,k提升音量。

简易解压命令

untar.ps1 untargz.ps1 untarxz.ps1

这几个命令字面意思很明显了,其实就是把一些常见的压缩包用一条命令去解析出来,省得去用tar这种命令还要去查那些烦人的参数。

untargz xxx.tar.gz
untarxz xxx.tar.xz
untar xxx.tar

命令行管理环境变量

EnvPath pa pd pb pv pr pe

这是一组在windows中用来管理path变量的工具,以pa.ps1为例子它里面包含了pau、pam、 pap这三个函数。u m p这三个后缀分别代表user machine process三个级别的用户变量。user级别是只对当前用户有效,machine级别对所有用户有效,process级别只是对当前这个pwsh进程有效。

pau的字面意思就是对user级别的path变量append一个变量,这个操作几乎每个开发者都非常头疼,总是忘记配置path变量,导致command not found的错误。有了pau这样的命令,操作上就非常简单了,直接pau [path1] 就把给定的路径加入到了path变量中,或者直接跳转到要加入path变量的路径,在路径下运行pau,在不给定参数的情况下会默认把当前的路径作为参数加到path变量后面,这样对path的操作就变得非常简单了。

同理pam pap和pau都是相同的操作,只是针对不同级别的path变量而已。剩下的pd 、pb、pv、pr、pe这些也都是针对path变量的读写,字面意思就是delete、backup、view、revert、edit这些功能。

  • pd 删除path变量中的某个路径。
  • pb 备份整个path变量。
  • pv 查看path变量。
  • pr 从备份中恢复path变量。
  • pe 用vim把path变量像文件一样进行编辑,保存后就修改完成整个变量。

具体的使用我就不一一详解了,可以自己动手尝试看看。不过要注意最好使用process级别的操作,这样就算试验坏了也不会损坏系统的path变量。

快捷键移动光标

ahk/keynav.ahk

ahk目录下面的是一些autohotkey脚本,虽然autohotkey脚本不是命令行工具,但它们和shell一样都是我提升操作效率的工具,所以我就一并放入这个项目里了。

这个keynav.ahk模仿linux里一个叫keynav的工具,它通过键盘去操作鼠标对整个屏幕不断进行二分查找来移动鼠标。我的脚本功能没它那么复杂,不需要用的二分屏幕的方式。我只是在按下alt+;键后进入鼠标移动模式,然后用hjkl这样vim的移动去操作鼠标的上下移动,以此来达到键盘操作鼠标的目的。

快捷键切换虚拟桌面

ahk/virtual_desktop.ahk

用快捷键快速向左右切换虚拟桌面,键的设置也是vim风格ctrl+win+j向右切换,ctrl+win+k向左切换,当然你也可以改成h和l两个键更符合vim的移动方式,但是我个人更喜欢用jk两个键。