• G, gg: 光标移动至文件首/尾;
  • zz, zt, zb: 将光标所在行居中/置顶/置尾;
  • H, M, L: 定位光标到当前窗口的首/中/尾;
  • *, #, n, N: 向前/后定位当前光标所在word,n/N沿相应/相反方向重复定位;
  • ^a, ^x: 若当前光标所在word是数字,可递增/递减该数字,同时支持decimal和hexadecimal;
  • ^, g_: 即Shift+6,定位光标到当前行首/尾的第一个非空白字符;
  • ^d, ^t: insert模式下,缩进/反缩进当前行;
  • ^w: insert模式下,向后删除一个word;
  • ^y: insert模式下,复制上一行同列字符;
  • ^x^f: insert模式下,补全路径名;
  • ^x^n: insert模式下,补全tag(需要tags文件的支持);
  • ^x^l: insert模式下,补全行(根据已有行);
  • I, A: 定位光标至当前行首/尾,并进入insert模式,I会忽略行首空白;
  • D, C: 删除光标所在位置到行尾的字符,C会进入insert模式;
  • cib: 或者ci(或者ci),删除当前括号内的所有字符并进入insert模式。c还可以是d或者其他编辑字符,i还可以是a(此时会将括号一同删除),b还可以是B(大括号)、t(html标签)或者具体的配对符号,如(), [], {}, ”, “”, <>。
    参加:h text-objects;
  • %: normal模式下%会跳转至配对括号;
  • %: lastline模式下代表当前buffer的文件名,可以有许多修饰字符,例如:sp %:r.cpp会分割当前窗口,并打开当前文件对应的cpp文件,%:r代表文件名消除最后一个后缀之后的字符串。
    参见:h filename-modifiers;
  • :set op? : 显示选项op的当前值;
  • :set op! : 反转开关式选项op,比如:set nu!开关行号显示,:set paste!开关paste模式

注:
1. 非特别说明,命令均在normal模式;
2. 字符前的^指Ctrl;
3. 技巧来自于实践,技艺提升于运用。

Tags: .

使用变参

  C/C++提供了函数的可变参数(variadic)机制,大部分人写的第一个C程序恐怕就是Hello World吧,使用的应该也是printf(“Hello, World\n”)。printf就是一个使用可变参数的典型,它的原型声明为,

int printf(const char *fmt, ...);

  其中返回值为实际输出字符个数,fmt为格式控制字符串,而”…”便声明了一个可变参数,你可以根据传递0个或多个参数给printf。printf内部会根据格式控制串中的格式指定符号(d, f, p等等)来逐个解析通过可变参数传进的实参变量。
  为解析可变参数,C语言提供了一个va_list类型和四个宏,分别是va_start, va_arg, va_end, 和va_copy,这些宏声明在stdarg.h中。

Tags: ,,.

  首先是技术上。我想,来这里,或者订阅这个博客的人,百分百都是“搞电脑的”吧。说来惭愧,通过http://feeds.feedburner.com/dutor订阅的人一个多月前就达到三百了,但一直没能写出什么有价值的东西,但这也确实是我能力不足,水平有限。但我也确实是想好好地写点东西的,一方面是我有分享欲,因为分享给我带来满足感,更重要的是我文字能力太差,需要历练,还有就是我觉得能描述出来尤其是写出来的东西才是你“可能”真正弄懂的东西。看过之前部分文章的同学可以看出,那些文章都是非常琐碎的东西,有的连知识都算不上。我希望以后我能有能力写出些抽象层次更高的东西,当然前提是我的抽象思维能力能有所提高。
  希望能在工作中获得更多的代码经历。对C++的理解还一直停留在语法层面,虽然看过一些好书,有过一些体会,能说出一些道道来,但没有代码尤其是产品级代码的历练,这种理解和道道都是很肤浅的,只能蒙蒙别人做炫耀的谈资罢了,自己有多少东西自己更清楚,起码“应该”清楚。另外,在技术上,对于看书,我是这么理解的,在任何领域,你首先需要的是知识,如果你想有所建树,就需要更多的知识。对于一个新手来讲,书无疑是最初获得知识的绝佳途径,除此之外互联网也是书本之外获取知识很好的途径,尤其是在读书遇到困惑的时候。当有了一定的知识基础后,就需要将这些知识运用到实践中,从而对所学有一个更深更高层次的理解。有了一定的实践经验之后,你的眼界可能会大开,再看之前的知识或者大牛的经验之谈,就“应该”完全是另一种阅读体验了吧。

Tags: .

  闲着也是闲着啊,来公司学习啊,好久没写博客了呀,欲望很强烈啊,那就写吧!我用Vim写啊,我骄傲啊,我还自己写了脚本啊,能用wiki语法写博客啊,写完可以自动处理成HTML啊,HTML啊!

  好啊,写了一个多小时啦,加了不少代码了啊,得处理一下啊,啊,怎么不行啊,自定义的命令找不到啦,啊,文件扩展名写错了啊,那就改名啊!

  苦逼的时候到了啊,为什么不保存文件退出到shell改啊,为什么装逼要在Vim里面改啊,提示我说会删除当前buffer啊,我说删除就删除啊,总得提示我文件没保存啊,尼玛它居然没提示啊,啥都没有啦!

Tags: .

  重装了系统,Vim升级到了7.3。
  之前,对于特定的文件类型建立了一些模版,类型的文件时候自动加载相应的模版。模版保存在$HOME/.vim/templates/下,比如C文件的模版为tpl.c。在.vimrc中有下面的配置:

1
2
3
4
5
function! LoadTemplate(extension)
    silent! :execute '0r $HOME/.vim/templates/'. "tpl.".a:extension
endfunction
" Load templates only when the file is NEW
au BufNewFile * silent! call LoadTemplate('%:e')
Tags: .

  换了Arch Linux,感觉很清爽,但也有不少问题,但大多都能在Arch Wiki上面得到解决,但仍有一个问题。
  我使用slim登陆管理器,登陆后由.xinitrc启动openbox-session,没有问题。但在slim启动之前,会出现短暂的终端登陆界面,但slim登陆界面随即被启动。登陆后(slim),在命令行,who命令没有输出。执行halt命令关机时,桌面立即退出,立即显示一个终端的登陆界面(而不是关机时的相关信息),几秒钟后机器正常被关闭。
  可是为什么who命令没有输出呢?我觉得这可能是session的有关问题(但不确定),我对session的理解不是很清晰,希望知道事情真相的朋友能够帮到我,谢谢!

1
2
3
4
5
6
7
8
9
10
11
#! /bin/bash
 
xscreensaver &
rl=$(runlevel | grep -o [0-6])
 
case $rl in
	4) exec openbox-session;;
	5) exec gnome-session;;
#4) exec ck-lauch-session openbox-session;;
#5) exec ck-lauch-session gnome-session;;
esac
Tags: .

  从Ubuntu 7.04/7.10开始接触Linux,从Ubuntu 8.04开始使用Linux作为桌面,在一定程度上见证了Ubuntu的成长,更重要的是自己也在成长,感谢Ubuntu的陪伴,祝愿他一切顺利。从身边和网络上的朋友了解到,Ubuntu 11.04有了相对比较大的变化,于是我也选择了变化,即使近来本人的经历已经跌宕起伏。我选择了Arch Linux。不知Arch这个词大家是怎么是发音的,我念作/a:k/,因为Archlinux的Logo让我想到Architecture,更重要的是,我觉得这个发音很性感,像socket一样性感。嗯,我是个感官动物,我喜欢一切性感的事物,或者说我觉得我喜欢的东西都很性感。

  做为个人使用,没有X,没有桌面的系统是不食人间烟火的系统。下面要做的就是,安装Xorg, 显卡驱动(安装X时,开源驱动会被安装,没有特殊需求的话,可不用手动安装)。安装桌面环境,重量级如GNOME、KDE之流,轻量级如xfce、lxde等等。我没有直接现成的安装桌面环境,而是分别安装窗口管理器(openbox),登陆管理器(slim),文件管理器(Thunar),系统面板(tint2)等等。有了基本的桌面,还需要安装和配置系统的字体(ttf-ms-fonts, bitstream等等),中文输入法(ibus-sunpinyin), 无线网络管理利器(wicd)。

  再最后,就是安装最常用的应用程序了,虚拟终端(urxvt),浏览器(chromium),编辑器(vim/gvim/gedit),媒体播放器(mplayer, smplayer, audacious),pdf阅读器(evince, xpdf),图片查看/编辑器(eog, feh, Gimp),邮件客户端(mutt, Thunderbird),即时通讯工具(Pidgin),不啦不啦。

Tags: .
1
2
3
4
5
6
7
8
9
10
vpath % /home/dutor/
vpath rc /home/dutor/.lftp/
vpath vsftpd.conf /etc/
vpath openbox /home/dutor/.config/
vpath tint2 /home/dutor/.config/
 
BACKUP: .vimrc .vim .bashrc .Xresources .xbindkeysrc .gitconfig .bin .screenrc \
.wordump.txt vsftpd.conf openbox .tmux.conf .conkyrc tint2
	dcp $?
	touch BACKUP

  其中,vpath是make的命令,用于指定文件的搜索目录。BACKUP是一个空文件,每当完成备份时,使用touch命令更新其时间戳。dcp是一个脚本,将其参数指明的文件拷贝到Dotfiles目录,$?是make的自动变量,代表依赖关系中比目标更新的依赖。

Tags: ,.

  参加了三次百度公司的面试,遇到了些面试题,根据记忆,列到这里,如果你对某些题有想法,不妨回复讨论一下。

  1. 谈一下static关键词,C&C++:文件域,函数域,类域
  2. 说说volatile
  3. static成员(变量/函数,尤其是变量)需要注意哪些问题:static变量需在类外,通常为.cpp文件中显式声明,否则会有链接错误
  4. STL由哪些部件组成:容器,迭代器,算法,仿函数,各类适配器等等
  5. STL标准容器有哪些,特性是什么:vector,deque, list, map/multimap, set/multiset
  6. vector的插入操作过程中会发生什么:内存分配/重分配/释放,元素构造/析构……
  7. 谈谈对适配容器的理解:stack, queue, priority_queue,对标准容器的适配/封装
  8. 谈谈C++
  9. 进程间通讯有哪些方式:内存共享,socket(包括Unix Domain),消息
  10. 两相同行数文件,每行一列,使用awk按列合并之: awk ‘{t = $1; getline <"file2"; print t, $1}' file2
  11. 你该如何实现tail命令:lseek, read, write….
  12. 实现atoi:指针有效性,字符有效性,整数溢出,错误状态
  13. memcpy与memmove有何区别:overlap
  14. 列出你所知道的排序方法及其复杂度、稳定性和适用情形
  15. 非递归实现快速排序
  16. 快速排序的复杂度证明
  17. 非递归实现二叉树的后续遍历
  18. 判断单链表是否存在环,环从何开始:老题了
  19. 仅知道单链表中某非尾节点的地址,O(1)删除该节点:节点覆盖
  20. 某文件大小为10G,每行保存一个整数,内存不可完全容纳,排序之:分段排序,然后败者树归并
  21. 简单描述虚拟内存机制
  22. 简单描述Linux进程模型(即包含哪些段,作用是什么,有何特性)
  23. 软、硬链接有何区别
  24. 一个系统,维护id->value的信息,信息量巨大,需多台服务器存储。系统可支持信息的增、删、改、查询及批量查询,每日增删该约千万次,查询约10亿次。设计该系统
Tags: .

很早就注册了twitter,但一直只是观众。今天又注册了新浪微博,有兴趣的朋友可以关注一下:http://weibo.com/dutor

PS. 我不是话唠,也不喜欢关注话唠(被刷屏的感觉很压抑)。

Tags: .
Page 2 of 3112345678910...2030...Last »