Windows 2000及其以后版本为cmd命令增加了基本的Tab自动补全功能的支持,PowerShell是微软第1个实现为文件、函数、变量和命令提供了该支持的产品,并且还可以根据需要定制化。在PowerShell中支持通过Tab自动补全功能,以及使自定义函数提供Tab键自动补全名称支持。PowerTab也采用这种方式,并且增加了很多高级特性。

PowerTab是由微软公司名为“Marc van Orsouw”的MVP创建的一个免费工具,它也被称为“/\/\o\/\/”或“PowerShell Guy”。这一工具由一系列脚本组成,将这些脚本嵌入到PowerShell机制中可以提供用户扩展的Tab实现。它通过搜索对象来提供更好的实现建议,包括默认的shell甚至未触及对象,如.NET类型的WMI类名,以及其他对象。该工具还通过提供包含各种建议的下拉框来改善用户体验,默认的Tab扩展允许通过按Tab键循环提供支持。而PowerTab将会列出所有建议,然后可以通过使用方向键、Tab键或Shift+Tab键来选择所需。

本文将主要讲述PowerTab的主要特性,会使读者能够更容易地使用命令提示符。

1 安装、禁用和卸载PowerTab

PowerTab未提供自动安装包,可以从作者的网站http://thepowershellguy.com/blogs/posh/archive/2009/05/15/powerTab-0-99b2-ctp3-fix.asp上下载ZIP包来安装。尽管目前PowerTab还是测试版,最新版本是0.99beta2。但这个工具相当稳定,到目前为止尚未出现过任何崩溃或错误的情况。为安装该版本,从测试页下载ZIP包,当前版本的PowerTab文件名是“PowerTab99b2-fixed.zip”。然后解压缩到选定的文件夹中,最好使用标准路径,如“C:\Program Files\PowerTab”,在安装后最好不要改动这个路径。这里为了方便,选择的路径是“C:\PowerShell\PowerTab”。

在文件夹中包含Setup.Cmd的批处理命令,执行即可开始安装。其作用为初始化PowerShell运行的环境变量,并通过dot-sourcing方式引用PowerTabSetup.ps1开始安装。

【注意】

如果不需要使用dot-source脚本,则需要重启当前Shell实例。

安装过程如图1所示,选择安装过程中出现的选项,然后等待安装完成。

安装脚本会创建一个默认的配置文件,为只读XML格式且名为“PowerTabConfig.xml”,默认与描述脚本保存在同一个文件夹中。

安装脚本会更新描述文件脚本,同时会附加如下代码,当启动shell时这些代码会激活PowerTab:

# Default PowerShell Profile
# Generated by PowerTab TabCompletionSetup################ Start of PowerTab Initialisatie Code ##############
#
#  added to Profile by PowerTab Setup For Loading of Custom TabExpansion,
#
# /\/\o\/\/ 2007
#
# http://ThePowerShellGuy.com
## Initialize PowerTab & 'C:\PowerShell\PowerTab\Init-TabExpansion.ps1' `-ConfigurationLocation 'D:\My Documents\WindowsPowerShell' ############## End of PowerTab Initialisatie Code ###############

最后安装脚本会创建Tab实现数据库,并且保存为TabExpansion.xml文件。创建数据库是一个冗长的过程,因为脚本要使用所有.NET类型和WMI类,最后得到包含类和命令名称的本地缓存用来完成Tab实现。

默认情况下PowerTab会在PowerShell的配置文件中写入初始化运行环境,这样才能在安装完成后跟随PowerShell启动。为了检查该配置文件中是否包含PowerTab,在PowerShell控制台执行如图2所示的命令。在包含目录路径的两行之前增加井号(#),即将其屏蔽,这样禁用了PowerTab。其中的“C:\PowerShell\PowerTab”是本机的PowerTab的安装路径,“D:\My Documents\WindowsPowerShell”是PowerShell的配置文件存放位置。

如果要卸载PowerTab,可在PowerShell控制台下键入notepad $profile启动字处理软件。删除配置文件中关于PowerTab的内容(务必做好备份,然后清理上面提到的两行内容)和PowerTab的安装目录,在这里删除“C:\PowerShell\PowerTab”即可。

2 PowerTab的工作原理

安装成功后PowerTab完全替代shell的Tab实现机制,提供了所有标准实现,如命令行、变量和函数等,同时增加了很多其他特性。例如,在输入.NET的System.Net.WebClient类时按Tab键打出类的全名时,PowerTab以新对象嵌入的方式完成全名或部分,图3所示为建议列表。

shell窗口左上角的Tab文本区表示PowerTab是Tab实现操作的核心,如果从列表中选择一种实现,该列表会立即消失。

使用其他对象时,无论这些对象来自.NET,COM或WMI,PowerTab均列举其属性和方法,并提供实现。以System.Net.WebClient为例,输入方法名,按Tab键完成DownLoad*方法。PowerTab就会从Internet上下载数据,如图4所示。

方法和属性补全的工作原理不仅限于实例方法也同样应用于静态方法,PowerTab通过检测类型描述和:分隔符,从类型的静态成员中提供实现。

PowerTab通过为WMI类名提供实现使得WMI的使用更加简单,使用WMI的障碍之一是需要记住所用的大量类名。PowerTab正好解决了这一问题,图5所示为在工作过程中PowerTab如何指定正确的WMI类名。

PowerTab通过检测WMI类名的前缀来找到类,如果当前类以WMI_、CIM_或MSFT开头,则自动补全功能会跟进显示响应的对象集。

PowerShell对命令历史的支持存在缺陷,可以使用DOSKEY和按F7键得到可视化的命令清单。当有很多命令历史时,这个列表不便于查找,并且很难定位到需要的命令,PowerTab通过引入特别的语法来搜索历史缓冲区来匹配自动补全以解决这一问题。如果想得到所有包含“cd”字符串的命令,则需要键入h_cd后按Tab键。图6所示为PowerTab实现历史命令的自动补全。

以h_为前缀的命令的实现会删除h_部分,键入h¬_后按Tab键也会列出存储在历史缓冲器中的所有命令。使用h_前缀相当于为对历史命令增加了一个命名空间,便于区别用户查询已执行的命令历史,还是执行新命令。

使用PowerShell时命令参数的名称很难记忆。例如,使用Get-Process cmdlet 调用过程实例时,应该使用-Name 参数,但却一直尝试用根本不存在的-Process 参数。使用PowerTab可解决这个问题。只要在一个cmdlet名后键入一个连字符,然后按Tab键会显示该cmdlet的所有参数的匹配列表。图23-7所示为Get-Process cmdlet的匹配列表。

这个特性可以应用在函数和外部脚本文件中。

2.1 数据栅格弹出窗口

有时很小的Shell窗口显示过多的信息使得查看变得困难,PowerTab通过打开新窗口来解决这个问题。新窗口会阻止控制台窗口中显示的Tab自动补全信息,而将信息显示在一个新的数据网格中。用户在其中查看详细的信息,然后通过双击或按Enter键选择一行,被选中的项会作为有效的实现返回。

与原始的Tab自动补全语法很相似,PowerTab提供多种捷径来弹出新窗口。最吸引人的可能是返回一个WMI类的列表,因为有关WMI类的相关信息的数量过多,在控制台查看很不方便。为了弹出这个窗口,在WMI类名后键入W_,然后按Tab键。图8所示为PowerTab启动网格窗口显示的WMI类。

【提示】

在弹出窗口中使用W_捷径匹配时,必须跳过WMI类名的Win32_部分。为了得到proc串的类,也可能是Win32_Process。必须键入w_proc[Tab],键入w_win32_proc[Tab]无效。

PowerTab还支持如下方法来弹出一个新窗口。

(1)t_:显示.NET类型的列表。

(2)f_: 列出当前定义的函数。

(3)d_:得到当前目录下的所有文件和子目录。

(4)g_:列出所有保存在历史命令中的命令。

(5)c_:显示自定义匹配。

PowerTab可使函数为用户弹出新窗口,以更加友好的方式来展示对象完全得益于名为“out-dataGridView”的函数。可为其输入一个对象集合,图9所示为使用该函数来展示进程ID、名称,以及为所有过程设置属性值,执行结果如图10所示。

3 配置PowerTab

PowerTab的主要配置文件是PowerTabConfig.xml,与PowerShell描述脚本保存在相同的目录中。PowerShell配置文件在系统中的变量是$profile,可以通过键入$profile查找到配置文件的地址进而找到PowerTab配置文件,在Windows Vista系统中可能保存在C:\Users\\Documents\WindowsPowerShell文件夹中。XML文件可读,而且很容易手动编辑文件。即以属性方式来定义设置,XML元素如下:

Global

TabActivityIndicator

1

bool

如果需要PowerTab移除在shell窗口的左上角显示Tab扩展的文字区,则必须将1改为0,并且在修改配置文件后重启Shell进程才能生效。

PowerTab允许用户修改其配置文件,全局变量$PowerTabConfig是指向所有配置的入口。例如,查看Tab行动指示器是否可用,则查看TabActivityIndicator属性。要将指示器禁用,则将此属性设置为$false,如图11所示。

如果要保存配置,则调用Export-TabExpansionConfig函数,如图12所示。

3.1 智能感知补全程序

在PowerTab中的Tab自动补全处理程序称为“ConsoleList”的处理程序,它可以绘制画出包含自动补全列表的方框,由名为“Lerch.PowerShell.dll的PowerShell”管理单元(作者为Aaron Lerch ,http://www.aaronlerch.com)发布,该管理单元提供了智能补全处理处理程序。如此命名是因为它打开一个小的弹出窗口,如同在Visual Studio .NET和其他开发环境用来提供匹配的智能弹出提示。

为了使intelligence处理程序可用,需要注册LerchSnapIn管理单元。首先以管理员运行PowerShell,然后定位到PowerTab的安装目录并调用installutil.exe注册Lerch.PowerShell.dll,如图13所示。

确保安装成功完成,并且在installutil命令中没有出现任何错误提示。

【提示】

installutil.exe程序是.NET框架中的一部分,如果它在系统路径中不存在,可以在框架的安装文件中找到该文件。通常情况下安装在C:\Windows\Microsoft.NET\Framework\v2.0.50727\下,如果环境变量Path中没有添加该目录,则不能直接调用它。

如果安装顺利,则需确保当开启shell会话时加载snap-in。为此,需要在配置脚本中增加一个对Add-PSSnapIn的调用。用记事本打开配置脚本,其路径可以通过调用全局变量$profile找到,在PowerTab初始化代码前添加下面的代码:

#add the Lerch IntelliSense snap-in (needed by PowerTab)

Add-PSSnapin LerchSnapIn

# Initialize PowerTab

需要注意的是一定要在PowerTab启动代码前几句加载管理单元,否则不会加载智能提示。当然其中的注释并不是必须的,但是可提高长期积累且不断添加内容的配置文件的可以读性。

还需要修改PowerTab的配置,以设置DefaultHandler的属性。最后试着按Tab键匹配,结果如图14所示。这里修改默认处理为智能提示的操作过程只是临时生效的,如果需要长期有效,则调用Export-TabExpansionConfig功能保存配置。

如果需要把默认处理程序改回为ConsoleList,则执行与上面相反的操作。即首先将PowerTabConfig.DefaultHandler设置为ConsoleList,然后删除或注释PowerShell的配置文件$profile中有关加载默认处理程序为智能提示的部分,修改后必须调用Export-TabExpansionConfig保存。

PowerTab支持ConsoleList和intelligence两种自动补全程序共存,它能够检测用户是否双击了Tab键。如果双击,则可以绑定不同的自动补全处理程序。此处理程序通过配置文件中AlternateHandler属性指定,这样即可将ConsoleList处理程序与Tab键绑定,使intelligence与双击Tab键绑定。要设置该功能,必须按照一定规则设定处理程序属性。即通过设置DoubleTabEnabled的属性为$true来启动double-Tab功能,最后设置AlternateHandler属性指定双击Tab的处理程序。图15所示为使double-Tab功能有效的命令。

如果需要这个设置,则必须调用Export-TabExpansionConfig命令保存配置。

3.2 Tab扩展数据库

Tab扩展数据库是包括所有项目的一个本地缓存,这些项目能以命令自动补全的方式返回。该数据库包括多种类型,默认为.NET类型的清单、WMI类,以及自定义匹配条目。使用这个数据库可以将这些自定义匹配条目作为代码片段,即用一个简单的关键字来保存一个长的字符串。只要键入这个关键字,即可得到长字符串。在同一关键字下可保存多个匹配,这样当需要一个关键字对应的匹配时可以得到一个选择列表。

可以通过添加add-TabExpansion函数来添加自定义的Tab扩展,需要关键字和扩展字符串两个参数。下面使用这一功能来创建一个属于自定义扩展列表,其中包括多个不同的文件路径,可以用其快速导航到需要的路径。图16所示为在清单中添加两个文件夹的代码。

PowerTab的自定义匹配语法为在脱字符号(^)后键入关键字,为了更快地导航到自定义列表,键入cd fav^[Tab]后可在弹出的列表中选择条目。

要在其他shell会话中应用该功能,必须调用Export-TabExpansionDataBase方法保存Tab扩展数据库的设置,如图17所示。

4 总 结

PowerTab是一个强大的工具,保存了多类型,能够极大地提高工作效率。可以肯定,一旦开始使用PowerTab,就再也不会使用PowerShell的默认的Tab扩展方法了。

本文总结了PowerShell的扩展方法,在PowerShell中支持通过Tab自动补全功能,以及使自定义函数提供Tab键自动补全名称支持。PowerTab也采用这种方式,并且增加了很多高级特性。

赛迪网地址:http://news.ccidnet.com/art/32857/20100719/2120355_1.html

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/

转载于:https://www.cnblogs.com/fuhj02/archive/2010/12/07/1898557.html

PowerShell 使用PowerTab加强Tab键自动补全相关推荐

  1. Solaris - 使用TAB键自动补全和显示当前用户与目录

    一.TAB键自动补全 习惯了其他Linux版本的自动补全,面对Solaris的这种情况,很是尴尬 通过修改如下配置: vi /etc/passwd 找到文件中第一行关于root用户的shell位 ro ...

  2. python tab键自动补全_设置python中TAB键自动补全方法

    设置python中TAB键自动补全方法 一.创建自动补全脚本如下: vi /tmp/python/tab.py #!/usr/bin/python # python tab file import s ...

  3. ubuntu 设置tab键自动补全

    Unbuntu 安装之后就在终端中使用Tab键不能自动补全,解决办法如下: 1.利用vi编辑器打开/etc/bash.bashrc文件(需要root权限) sudo vi /etc/bash.bash ...

  4. 配置python命令tab键自动补全

    配置python命令tab键自动补全 1. 下载readline模块 http://newcenturycomputers.net/projects/readline.html 2. install ...

  5. Mac终端Tab键自动补全实现

    开启Mac 终端Tab自动补全功能 1. 打开终端,输入nano .inputrc 命令回车,进入编辑状态 $ nano .inputrc 如图: 2. 粘贴下面的语句到文件中 set complet ...

  6. PowerShell: 在自定义代码中支持Tab键自动补全

    大家好,我是码农杰克~ 在PowerShell中很多Cmdlet在输入参数时按tab键就可以可以自动补全,这是怎么做到的呢? 我们先来看个PowerShell自带命令:Test-Path 在Power ...

  7. mac git命令按tab键自动补全

    mac上命令行比windows好用很多,但是git默认按tab键是不会自动补全的,很不爽.下面我们按步骤来介绍怎么做到自动补全. 1.安装home-brew,相应大家装装过了,如果没装,直接去官网看下 ...

  8. python代码命令行tab补齐_Python在命令行下Tab键自动补全脚本

    摘要 由于写shell命令习惯了Tab补全,其实我个人认为这不是应该有的一个恶习,基础开始我们不应该想着Tab去自动补全,我们应该趁这时候来多多记忆基础的东西.唉,恶习难改...... 老实说我也是网 ...

  9. ubuntu 普通用户下设置tab键自动补全

    1.添加用户 Ubuntu系统下useradd一个新的用户,切换到该用户时,发现终端命令行下tab键补全不了 $ useradd tab # 新增tab用户 $ passwd tab # 设置密码 $ ...

  10. php ssh tab补全,bash的按TAB键自动补全(自动完成)的原理与扩展

    最近在用源码安装ceph,发现命令不能自动补全,然后找到了下面这篇文章,写的很好~转载一下~ 源码安装ceph命令没法自动补全的解决方法:把ceph-deploy安装的可以自动补全的系统里/etc/b ...

最新文章

  1. 关于IBM Lotus的JAVA代理进入jar包的说明
  2. SQL实战篇:SQL窗口函数及真题
  3. 全网首发 PowerBI 秒级实时大屏通用解决方案
  4. 基于SQLite+EF6实现一套自己的Key-Value存储管理工具包(1)
  5. 解决mysql导数据时,格式不对、导入慢、丢数据的问题
  6. 电脑有网络计算机共享怎么用,2台电脑怎么共享文件?没有网络也能共享【详解】...
  7. 2020虚拟机下载教程(图文详解)
  8. 如何用快解析自制IoT云平台
  9. Fiddler 移动端/模拟器安装证书
  10. 地壳中元素含量排名记忆口诀_地壳含量_地壳中元素含量排名口诀
  11. rem布局百分比与rem的比例换算
  12. 海外英语杂志社海外英语杂志社海外英语编辑部2022年第14期目录
  13. php中file_get_contents与curl性能比较分析
  14. 即兴小探华为开源行业领先大数据虚拟化引擎openLooKeng
  15. mysql数据库服务器重启_重启mysql数据库服务器
  16. php date函数 在哪里,PHP date函数
  17. mysql取消自动登录_腾讯QQ怎么取消QQ宠物自动登录?,你需要学习了
  18. 2021全球与中国自动导引车市场现状及未来发展趋势
  19. python数据挖掘例题_大工20春《数据挖掘》在线作业1题目【标准答案】
  20. 全球及中国吊臂汽车起重机行业研究及十四五规划分析报告

热门文章

  1. 交易撮合引擎原理与实现【含源码】
  2. Julia: 关于Array排序函数sortslices
  3. Julia: PyPlot的一些用法整理
  4. Julia: 趣!,13579分别在一本168页书的页码中出现的次数
  5. 招聘云计算、虚拟化、前端开发、测试等工程师
  6. php+compose+使用,docker+compose+nginx+php
  7. 【裂缝识别】基于matlab GUI无人机裂缝图像处理系统(带面板)【含Matlab源码 1727期】
  8. 【优化算法】蚱蜢优化算法(GOA)【含Matlab源码 1070期】
  9. 【数学建模】基于matlab计划生育政策调整对人口数量、结构及其影响的研究【含Matlab源码 749期】
  10. 【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】