工欲善其事,必先利其器,程序员更是如此,若是没有一套与本身思惟同步的工具,将很是难受而且编码效率会很是低。html
但十个程序员就有对工具的十种不一样理解,本人如今冒然将本身的“工具箱”拿出来晒晒。若对你们没帮助,轻轻飘过便可,若能引发一丝共鸣,便有了价值。python
分三个专题来进行展现--linux
1. 命令行&界面(本文)c++
2. 快捷键git
3. 文本程序员
本人95%的时间都在windows上学习、工做,因此绝大部份内部都是和windows相关。shell
在explorer中浏览到某路径时,想要打开命令行窗口执行相关命令,这个场景常常会遇到,而通常的作法就是win+R,输入cmd,而后D:,再cd ...。
在win7下能够shift+右键文件夹空白处,这样快捷菜单就多了一个"在此处打开命令窗口"项,如图ubuntu
下面本人将介绍一种DIY方法
在注册表HKEY_CLASSES_ROOT\Directory\Background\shell 下创建一个子项,命令为"Q在这里打开cmd",(开头的Q能够用作快捷键),再在这个新子项创建一个command子项,而后将其数据设置为 cmd.exe /s /k pushd "%V",如图windows
这样在空白处右键后,就会有一个"Q在这里打开cmd"的菜单项。这里点击,或者按Q均可以打开命令行窗口了,而当熟练后,能够右键后马上按Q,根本不须要去看出现的菜单,如图api
或者将下面的代码复制到一个reg文件中,而后双击执行reg文件便可。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\QOpencmd\command] ""="cmd.exe /s /k pushd \"%V\""
这里只因此选Q,是由于不会和其它的冲突。win7 shift+右键出来的"在此处打开命令窗口"项快捷键是W,和"新建"的快捷键冲突了,当按W后光标会在这两项之间跳动,还须要第三次操做--左键或者回车。不比DIY方法中的直接右键,而后马上Q,来得快。(关于快捷键的精髓操做在后面的章节中再阐述)
在命令行中打开explorer窗口,能够用explorer+路径,在win shell中是用%cd%来表示当前路径,因此 explorer %cd% 就能够在explorer中打开命令行的当前窗口
若是嫌这个命令太长了,能够创建一个e.bat文件,其内容为
::在命令行中打开资源浏览器窗口 @echo off explorer %cd%
将e.bat文件放在系统路径,或者专门创建一个文件夹来本身的工具,而后将其添加到系统路径。
这样在命令行中仅仅输入e,而后回车,就能够打开explorer了!! 32个赞!!
受到e.bat的启发,因而又写了一个x.bat,其内容为
::直接用x命令来退出控制台窗口 @echo off exit
这样能够在命令行中直接用x,就能够退出命令行了。
ubuntu中是用插件来实现资源管理器到命令行窗口的打开,而命令行到资源管理器是在.bashrc中创建一个别名 alias e="nautilus $PWD" (ubuntu下的资源管理器叫nautilus)
osX中也是用插件go2shell来实现Finder到终端,而终端到Finder是用open . (. 表示当前路径)
本人很是喜欢使用explorer左侧的树控件。可慢慢发现有一个问题,就是这个树控件中的节点太容易被拖动了,有时浏览文件时,不当心拖动了文件夹,文件夹移动了位置,而本身还彻底不知。当N天后发现问题时,想要找回文件夹可比登天了。
因而本人就写了个钩子程序,能够禁用掉explorer树控件的拖放功能。这里是下载地址,在win7下测试经过 BanExplorerTreeDrag
而在win7树节点的展开或者收起,都得双击,或者点击左边那一个小小小的箭头,很是的不爽。想要一个只要单击树节点,节点就会展开或者收起的树控件。找了各类设置后,发现没法实现。曾经都有想过本身写一个相似的Explorer程序的打算,可由于种种缘由一直没有实现,如今也只能忍受这个树控件了。
subst能够用一个文件夹路径创建一个虚拟的磁盘。
好比 subst G: d:\notedata2 就能够新建一个G:磁盘,而且其内容就是 d:\notedata2 文件夹的内容。(固然G:这个名称不能先被占用)
若是有哪一个文件夹须要常常访问,能够用这种方式将其映射成磁盘,而后不论是在Explorer中仍是在命令行中均可以比较方便地访问。命令行中能够直接用G:\来定位,而不须要用原来比较长的路径了。(win7的"库功能"也能够将特定的文件夹放在好找到的位置,不过在命令行中仍是不方便)
有一个问题是windows重启后这个映射就须要从新创建,不过能够写一个批处理文件开机执行便可。
svn要update/Commit时都得在Explorer中找到文件夹路径,而后右键,再找到Update或者Commit菜单项,若是有多个路径要操做,简直是太繁琐了,而且还容易漏掉。这里介绍和批处理文件来简化操做。
**svn**
将TortoiseSVN安装目录中的bin文件夹添加到系统路径,这样就能够用svn.exe命令,输入svn help,能够发现用svn update path, svn commit path来代替菜单点击(path是项目路径)。而后能够在桌面创建两个bat文件,内容分别是
svn update path
svn commit path
这样直接点击这个两个文件就能够实现svn的update/commit操做了。
若是有多个路径都须要update/commit操做,能够在批处理文件同目录下创建file.txt文件,将要提交的文件或文件夹路径都列在file.txt文件中,如图
而后在批处理文件中用下面的代码能够循环访问到文件中的每一列
@echo off for /f %%i in (file.txt) do ( echo %%i )
pause
若是是svn的update/commit操做,只要将echo %%i, 换成 svn commit %%i 或者 svn update %%i 便可。file.txt中的文件名得使用短路径,也就是不包括空格的路径,若是有空格就得在%%i加上引号。用win32api的 GetShortPathName() 能够获取短路径,本人用.Net实现了一个很是简陋的程序shortName,能够将长路径转化为短路径。
**git**
同时将git安装目录中的bin文件夹添加到系统路径,添加创建pull.bat文件,内容为
git pull
pause
push.bat文件,内容为
git add . git commit -a git push pause
而后直接点击文件就能够实现git的pull/push操做了。固然pull.bat, push.bat都得放在项目路径下,若是是要操做其它的路径就先得cd 到其路径下。
小结: 尽可能用命令来替代界面操做,上面也写了一小段windows的批处理代码,这里不建议深刻学习windows shell,也不建议深刻学习linux shell,而应该学跨平台的脚本,好比python, ruby,或者perl。这部分在后面的“文本”一节中再详细说明。
本人用c++还实现了一些小小的命令行工具。好比
Beep.exe 在命令行中发出Beep声音,实现就是调用win32API的::MessageBeep()函数
Sleep.exe 让命令行进程睡眠指定的时间,就是调用::Sleep()函数
OpenInExplorer.exe 打开explorer,而且定位到指定的文件或文件夹,其实用的ShlObj中的SHOpenFolderAndSelectItems()函数
FileSize.exe 输出指定文件的大小,单位是字节。
下载连接:simple_tools
上面这些功能或许windows自身已有提供,不过本人懒得去找,就顺手本身实现了,反正也不复杂。 实现这些工具也是受了Unix哲学的影响。
还有一些乱七八糟的批处理,请参见 http://www.cnblogs.com/xiangism/archive/2012/11/26/2789606.html
再写一个心得--只因此说程序员是懒惰的,是由于把工具实现好以后的程序员是懒惰的,而在实现、打磨工具的过程当中应该持勤奋态度~~
未完,待续...