You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
9.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 轻松话题(二) | 给你分享我的工作百宝箱
你好我是Chrono。
今天我再来说点C++之外的话题。我来聊聊我的工作方式,给你介绍一下我用的开发环境,有快捷键、配置脚本、常用命令什么的。算不上什么“高效技巧”,但是也能从小处提高工作效率,希望能给你一点借鉴。
## Linux
我主要是在Linux上写程序经常要登录到内部的服务器但我常用的笔记本或者台式机上装的还是Windows所以就需要有一个“趁手”的客户端。
Windows上有很多这样的软件最早我用的是PuTTY但其他很多同事用的是XShell。不过现在的我已经都不用这些了。
你一定想知道难道还有什么比PuTTY、XShell更好更强大的远程终端吗
要说有也算有,要说没有也算是没有。
因为现在我就把Linux操作系统当成终端机来使用就用它内置的Terminal、ssh命令来实现远程登录。
具体的做法也很简单安装一个VirtualBox再最小化安装一个Ubuntu就可以了。
这么做的好处在哪里呢?
首先这个环境完全是免费的不需要注册或者破解。其次它本身就是Linux与开发环境相同可以用来在本地做试验、“练手”。再次Linux里有非常丰富的工具可以下载安装能够随心所欲地定制环境用起来非常舒心。
当然把Linux转换成一个高效的终端还是需要一点点“技巧”的接下来我就跟你说说我的做法要点就是“**全程键盘操作**”。
第一个用“Ctrl+Alt+T”可以直接打开命令行窗口而不必用鼠标去点图标然后用“Ctrl+Shift+T”可以开新标签页这样就可以很方便地实现多窗口登录不会像某些软件那样有数量的限制。
另外我选择的是Ubuntu 14.04在这个版本里可以用鼠标右键点标签页直接改标题名区分不同的窗口即使开多个标签也可以轻松管理但这个功能在后来的16.04、18.04却给去掉了只能额外写Shell脚本来实现有那么一点不爽
第二个修改Shell的配置文件“.bashrc”或者是“.profile”在里面加上一行“set -o vi”。
```
#.bashrc
set -o vi
```
这样你就可以在命令行里实现vi操作了按一下ESC键就进入到了vi模式可以用“/”快速查找之前的历史命令,而不必每次都要敲完整的命令。
比如说,之前输入了一条命令“`ssh chrono@10.1.1.25`”登录服务器那么下次再登录时就没有必要再敲一遍了只要按ESC然后输入“/25”回车Linux就可以帮你找到上次的这条命令。这时你就可以轻松愉快地登录了。
用Linux作为终端的唯一一个缺点是它无法自动填写登录密码每次都要手动敲这个的确比较烦人。所以只能把登录密码尽量改得简单好输入最好是键盘上的固定模式比如设置成“qazwsx”这样就可以在1秒内完成。
## Vim
写代码就要用到编辑器在Windows里常用的有VS Code、Sublime等等而在Linux里最佳的选择可能就是Vim了。
说是Vim但我更愿意称之为vi。一方面是早期的使用习惯我最早用的是AIX上面只有vi而不是Vim另一个更重要的原因是可以少打一个字符。可不要小看了这一点效率的提升想想每天你要说多少次、用多少次vi吧。
有的人可能还是习惯在Windows上的编辑器里写代码然后通过某种方式上传到Linux再编译和运行。我个人觉得这种做法不太可取既然是Linux开发就应该全程在Linux上工作而且很多时候会现场调试不可能有那么合适的编辑器。
所以,尽早抛弃“窗口+鼠标”式编辑器强迫自己只用vi就可以尽快熟悉vi的各种操作让你在Linux上“运指如飞”。
另外你可能知道vi也有很多的插件比如ctags搭配上众多的插件会让vi更“现代化”。但对于服务器开发来说还是那个问题不是每台服务器都会给你配置得那么完善的。与其倒腾那些“花里胡哨”的插件不如“离开舒适区”练好vi的基本功到哪里都能吃得开。
最基本的vi操作我就不多谈了网上一搜一大堆我来说几个写代码时比较实用的命令。
1.“:tabnew”新建一个编辑窗口也就是支持多标签操作多个标签可以用“gt”切换。
2.“Ctrl+V”“Shift+V”的整列整行选择然后就可以用“x”剪切、“p”粘贴。
“Ctrl+V”的列选择功能还有一个衍生的方便技巧选择多列后按“I”再输入“//”按ESC就可以在每行前面都插入“//”,轻松地实现大段代码的工整注释。
3.“Ctrl+P”是vi内置的“代码补全”功能对我们程序员来说特别有用。只要写上开头的一两个字符再按“Ctrl+P”vi就可以提示出文件里曾经出现的词这样在写长名字时就再也不用害怕了。
不过vi的“代码补全”功能还是比较弱的不是基于语法分析而是简单的文本分词但我们也不能太苛求。
4.可以随时用“Ctrl+Z”暂停vi把它放到后台然后执行各种Shell操作在需要的时候只要敲一个“fg”命令就可以把vi恢复回来。
这在调试的时候非常有用改改代码运行一下看看情况再切回来继续改不用每次重复vi打开源文件而且可以保留编辑的“现场”。
除了刚才的这四点操作技巧想要用好vi还必须要对它做适当的配置比如显示行号、控制缩进等等。下面就是我常用的“.vimrc”非常短小基本上我每登录一台新服务器就会把这个配置复制过去这样无论在哪里vi都会是我熟悉的环境。
```
#.vimrc
set nu
sy on
set ruler
set smartindent shiftwidth=4
set tabstop=4
set expandtab
set listchars=tab:>-,trail:~
set list
colorscheme desert
```
## Git
写完了程序,还要用适当的版本控制系统把它管理起来,否则源码丢失、版本回溯、多人协作等问题会把你弄得焦头烂额。
我最早用的是微软的VSSVisual Source Safe后来用过IBM的ClearCase再后来又用SVN现在则是Git的“铁杆粉丝”。
Git的好处实在太多了分布式、轻量级、可离线、开分支成本低……还有围绕着它的GitHub/GitLab等高级团队工作平台绝对是最先进的版本控制系统。
如果在2020年的今天你所在的公司还在用SVN这样的“上古”软件可真的是要考虑一下项目的前景了。
Git有许多高级用法有的也很复杂我不可能也没必要把那些讲清楚。所以我只介绍一个能够简化Git操作的小技巧**命令别名**。
Git的命令含义明确但缺点是单词太长多次操作输入就显得很繁琐这点就不如SVN命令那么简单明了。好在我们可以在Git的配置文件“.gitconfig”里为这些命令起别名比如把“status”改成“st”把“commit”改成“ci”。
下面这个就是我常用的一个Git配置里面还有个特别的地方是在“diff”的时候使用“vimdiff”用可视化的方式来比较文件的差异比原始的“diff”更好。
```
[alias]
st = status
ci = commit
br = branch
co = checkout
au = add -u .
ll = log --oneline --graph
d = difftool
[diff]
tool = vimdiff
```
## GDB
最后来说一下调试工具GDB吧它应该是Linux程序员最得力的一个帮手了。
标准的GDB是纯命令行式的但也有一些基于它的图形化工具比如DDD、Data Display Debugger但用好GDB命令行调试还是我们的一项基本素质。
**GDB不仅是一个调试工具它也是一个学习源码的好工具**
单纯的源码是静态的,虽然你可以分析它的整体架构,在头脑里模拟出它的工作流程,但计算机实在是太复杂了,内外部环境因素很多,仅靠“人肉分析”很难完全理解它的逻辑。
这个时候GDB就派上用场了以调试模式启动任意设定外部条件从指定的入口运行把程序放慢几万倍细致地观察每个变量的值跟踪代码的分支和数据的流向这样走上几个来回之后再结合源码就能够对程序的整体情况“了然于胸”。
GDB用得久了差不多每个人都会有一些自己的心得。我列出一些我觉得能够提高调试效率、最有价值的命令。
* pt查看变量的真实类型不受typedef的影响。
* up/down在函数调用栈里上下移动。
* fin直接运行到函数结束。
* i b查看所有的断点信息。
* wh启动“可视化调试”。这个是我最喜欢的命令可以把屏幕分成上下两个窗口上面显示源码下面是GDB命令输出不必再用“l”频繁地列出源码了能够大大提高调试的效率。
## 小结
好了,今天的话题就到这里,简单小结一下我的工作环境,给你一个参考:
1. 我选择Linux虚拟机作为登录服务器的终端可以很容易开多窗口操作
2. 我选择Vim作为编辑器熟记常用命令后写代码也很方便
3. 我选择Git作为版本管理工具使用别名来简化命令
4. GDB是调试C++程序的利器,也可以用来学习源码。
那么,你是否也有一些工作中的实用小技巧呢?欢迎一起来分享。
![](https://static001.geekbang.org/resource/image/f6/87/f6b5366fe5a70ba18517aa6bc51f5287.jpg)