打磨程序员的专属利器——命令行&界面

工欲善其事,必先利其器,程序员更是如此,如果没有一套与自己思维同步的工具,将非常难受并且编码效率会非常低。

但十个程序员就有对工具的十种不同理解,本人现在冒然将自己的“工具箱”拿出来晒晒。若对大家没帮助,轻轻飘过即可,若能引起一丝共鸣,便有了价值。

分三个专题来进行展示--

1. 命令行&界面

2. 快捷键

3. 文本

------------------------------------------aj的分隔线------------------------------------------

命令行&界面

本人95%的时间都在windows上学习、工作,所以绝大部分内部都是和windows相关。

1. explorer和命令行窗口相互打开

在explorer中浏览到某路径时,想要打开命令行窗口执行相关命令,这个场景经常会遇到,而一般的做法就是win+R,输入cmd,然后D:,再cd ...。
在win7下可以shift+右键文件夹空白处,这样快捷菜单就多了一个"在此处打开命令窗口"项,如图

下面本人将介绍一种DIY方法
在注册表HKEY_CLASSES_ROOT\Directory\Background\shell 下建立一个子项,命令为"Q在这里打开cmd",(开头的Q可以用做快捷键),再在这个新子项建立一个command子项,然后将其数据设置为 cmd.exe /s /k pushd "%V",如图

这样在空白处右键后,就会有一个"Q在这里打开cmd"的菜单项。这里点击,或者按Q都可以打开命令行窗口了,而当熟练后,可以右键后立刻按Q,根本不需要去看出现的菜单,如图

这里只所以选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中是用插件来实现资源管理器到命令行窗口的打开,而命令行到资源管理器是用nautilus pwd,好像是这样吧,反正ubuntu下的资源管理器叫nautilus

osX中也是用插件go2shell来实现Finder到终端,而终端到Finder是用open . (. 表示当前路径)

2.与explorer的左侧树控件的恩怨
本人非常喜欢使用explorer左侧的树控件。可慢慢发现有一个问题,就是这个树控件中的节点太容易被拖动了,有时浏览文件时,不小心拖动了文件夹,文件夹移动了位置,而自己还完全不知。当N天后发现问题时,想要找回文件夹可比登天了。
于是本人就写了个钩子程序,可以禁用掉explorer树控件的拖放功能。这里是下载地址,在win7下测试通过 BanExplorerTreeDrag

而在win7树节点的展开或者收起,都得双击,或者点击左边那一个小小小的箭头,非常的不爽。想要一个只要单击树节点,节点就会展开或者收起的树控件。找了各种设置后,发现无法实现。曾经都有想过自己写一个类似的Explorer程序的打算,可因为种种原因一直没有实现,现在也只能忍受这个树控件了。

3.subst创建一个虚拟盘

subst可以用一个文件夹路径建立一个虚拟的磁盘。

比如  subst G: d:\notedata2 就可以新建一个G:磁盘,并且其内容就是 d:\notedata2 文件夹的内容。(当然G:这个名称不能先被占用)

如果有哪个文件夹需要经常访问,可以用这种方式将其映射成磁盘,然后不管是在Explorer中还是在命令行中都可以比较方便地访问。命令行中可以直接用G:\来定位,而不需要用原来比较长的路径了。(win7的"库功能"也可以将特定的文件夹放在好找到的位置,不过在命令行中还是不方便)

有一个问题是windows重启后这个映射就需要重新建立,不过可以写一个批处理文件开机执行即可。

4.svn,git的自动提交

svn要update/Commit时都得在Explorer中找到文件夹路径,然后右键,再找到Update或者Commit菜单项,如果有多个路径要操作,简直是太繁琐了,并且还容易漏掉。这里介绍和批处理文件来简化操作。

**svn**

将TortoiseSVN安装目录中的bin文件夹添加到系统路径,这样就可以用svn.exe命令,输入svn help,可以发现用svn update path, svn commit path来代替菜单点击(path是项目路径)。然后可以在桌面建立两个bat文件,内容分别是

svn update .....

svn commit ....

这样直接点击这个两个文件就可以实现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。这部分在后面的“文本”一节中再详细说明。

5.Beep, Sleep, OpenInExplorer.exe, FileSize.exe

本人用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

再写一个心得--只所以说程序员是懒惰的,是因为把工具实现好之后的程序员是懒惰的,而在实现、打磨工具的过程中应该持勤奋态度~~

未完,待续...

 

时间: 2024-08-07 01:10:31

打磨程序员的专属利器——命令行&界面的相关文章

打磨程序员的专属利器——文本

打磨程序员的专属利器分三个专题展示-- 1. 命令行&文件 2. 快捷键 3. 文本 (本文) 1. 记笔记 好记性不如烂笔头,对于程序员更是如此.学习某种新语言或者某个库,若事先不记点笔记,几年后再拣起来会非常地慢. 之前自己一直用“为知笔记”,但慢慢发现了几个问题. a. 这个软件喜欢升级,而每次升级都将界面改得面目全非(其实现在绝大多数软件都喜欢没事升级).我只是想一个简洁的软件界面,只想专注于笔记,而为知的每一次更新后都得花精力在熟悉界面上. b. 为知的笔记不是文本,这样笔记内容几乎只

打磨程序员的专属利器——快捷键

打磨程序员的专属利器分三个专题展示-- 1. 命令行&文件 2. 快捷键(本文) 3. 文本 ------------------------------------------aj的分隔线------------------------------------------ 前言 本人与快捷键的渊源应该从游戏开始说起.10年前的经典游戏wow,游戏里的技能非常多,所以玩游戏时将所有比较常用的技术都设置成了快捷键.方向控制改成sdf,然后左手的其它字母键都是技能快捷键.甚至是鼠标滚轮的上下滚动都被

如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI

如何让程序员更容易的开发Web界面,是一个持久的话题,所有的从事相关开发的公司都会碰到这个问题,并且被这个问题所深深困扰. Tiny框架也不得不直视这个问题,确实来说,想解决这个问题,也是非常有难度与深度的,业界也有各种各样的尝试,这也是有各种各样不同框架出现的原因. Tiny框架构建者认为,完全采用一种框架解决所有问题,是不现实的.而且即使目前找得到一种非常好的框架,暂时可以满足应用需要,但是随着技术的发展,业务的进化,就会慢慢变得不再满足业务需要.因此,Tiny框架构建从不再把做一套UI组件

程序员的专属语言-----注释(04)

记得以前有个笑话,说一个程序员和他的朋友去吃饭,他拿着本记录菜名,几个人商量之后决定有一个菜不点了.过了一会儿上菜的时候还是上来了,大家都问为什么,服务员拿来菜单一看:    //鱼香肉丝.对于不懂程序的服务员,她显然没有明白这两个斜杠是什么意思 ,所以就闹出了这个笑话.在程序开发中,如果一味的写程序可执行的代码,运行起来可能没有问题,但是后续更改或维护就比较吃力,毕竟人直接看程序难度是有点大的,所以为了方便在以后阅读程序或者别人阅读程序时能比较容易读懂,为程序添加注释是必要的.听人说,一个完整

java程序员常用的linux命令

作为一个java后端开发者,在日常工作中肯定会有和linux打交道的时候.下面我整理了一些开发中可能需要用到的一些命令(写这篇随笔前,我也没有什么操作经验,主要防止自己忘记这些操作命令,以后有用到新的命令再修改). 以下的操作是通过SecureCRT对服务器进行远程连接,使用WinSCP来进行文件上传. 一.用户相关的一些命令 1.新建用户  adduser username  (只有root有权限新增用户) 2.修改用户密码  passwd username 3.切换用户 su usernam

程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳

来源自:http://www.techug.com/node-js-community 几天前,一名 NPM(Node.js Package Manager)社区的贡献者 Azer Koçulu 出于对 NPM 管理层的怨愤,不声不响删除了自己在 NPM 上面的全部代码,其中就包含只有 11 行代码的“Left-pad”,没想到从中国北京到美国硅谷,从大学宿舍学习 Node.js 的新手到 Facebook 的资深工程师,整个互联网界都炸开了锅,他们手中的许多 Node.js 模块,全罢工了.

【转载】程序员的成长和代码行数的关系

在2011年John D. Cook写了一篇博客,其中提到: 我的朋友Clift Norris发现了一个基本常数,我称之为Norris常数,一个未经培训的程序员在他或她遇到瓶颈之前能写出的平均代码量.Clift估计这个值是1500行.超过这个数以后,代码会变得如此混乱,以至于本人都无法轻而易举的进行调试和修改. 我还不了解足够多的初级程序员来验证这一结果,不过我自己认识到,程序员生涯的下一个瓶颈将发生在20,000行.我把Norris常数改成2,000那样正好变成十倍. 在我离开大学之后的第一份

程序员开发学习利器篇(下)之文档资料软件-获取软件、资料的最好途径

以下内容,开发初学者看,熟手略过. 论语有言: 工欲善其事 必先利其器 ,意思是工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 第二篇我们来说说软件.文档资料.信息获取的高效途径. 首先说句题外话,程序员的软件.资料学习盘 应该是这个样子的: 文件夹视图应该是 详细列表 并且应用到电脑所有文件夹,方便查看文件的全名 最新的修改日期 类型 大小.并且文件显示应该是全名称 包括后缀名,文件目录起名字最好都是英文的,尤其是软件的安装目录,因为有些软件不识别中文的路径.

java程序员常用的cmd命令

1.查看端口号或者进程号使用情况 1.1.查看所有端口占用情况 C:\Users\Administrator>netstat -ano 活动连接 协议 本地地址 (ip:端口) 外部地址 状态 PID(进程号) TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 912 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:1536 0.0.0.0:0 LISTENING 632 TCP 0.0.0.0:1537 0.0.0.0: