某些情况下,你不得不停下当前文件的编辑工作,退出Vim,处理其他的事情,然后重新打开Vim继续刚才的工作。我总是希望Vim打开某个文件的时候,光标停在上次关闭文件时所停留的位置。Vim的默认配置似乎也是这样的,但直到我添加了自己的~/.vimrc和各种插件、模板文件后,Vim的”记忆”似乎被抹去了。每次打开文件,光标总是在文件的第一个字节处闪烁。于是我只能使用’.或者`.使光标移动到最后修改过的地方,但是,你知道的,我的注意力并不是总在刚刚修改过的地方。通常,光标在哪里,我的瞳孔就朝向哪里。
  这个问题折磨我好久了,我终于下决心要整治一下。我先把那些插件给禁掉,又把map的很多键也禁了,最后把自定义的.vimrc也清空了,但问题依旧……这让我很是无奈。
  Google了半天,据说viminfo保存了文件的一些状态信息,包括光标信息。:h viminfo,得知’0保存了Vim上次退出时光标的位置信息。但’0还不是我想要的,因为它保存的是一个”全局”的位置信息。比如,我先打开foo.c,光标移动到非开头处,退出,再打开bar.c,移动到非开头处,退出,再打开foo.c,按下’0,Vim自动打开bar.c并跳到退出时的位置。

Tags: .

开场白

Vim是一个十分强大的文本编辑器,被誉为”编辑器之神”,熟练地使用Vim会使你处理文本、编辑代码的效率提升n个数量级!如果你现在还在使用gedit甚至是”记事本”的话,我奉劝你赶快把它扔到垃圾桶,马上开始你的Vim之旅。这里列出一些我经常使用的基本的Vim命令和技巧,Vim的使用是一个长期的学习、实践、再学习、再实践的过程。Here we go.

安装Vim/Gvim

如果你现在没使用过Vim/Gvim,你首先需要安装它们,当前的版本为7.2。Debian/Ubuntu下面,sudo apt-get install vim-gnome即可。其他系统也有相应的包管理程序来直接安装。对于Windows,你需要到Vim的官方网站来下载安装。安装时记得选中”设置Vim环境变量”的选项,这样你就可以直接在cmd下使用vim了。
在正式开始之前,最好在终端(cmd)里运行vimtutor,一步步按照提示操作,以对vim的操作有一个初步的了解。

快速的移动

别在总在插入模式里呆着

除了敲代码,不要总在插入模式里呆着,因为这样的Vim就和诸如gedit等普通的编辑器就没什么区别了。这就是为什么一些新手总是在插入模式的原因了,”好用”或者说”友好”。但是,Vim真正的威力却在于其命令模式,你将会发现,随着你对Vim的了解和熟练,你用插入模式的时间会越来越少。

Tags: .
描述
Tab 自动补全文件名或者目录名,按下两次会列出多个选项
Ctrl + w 删除左侧的一个单词
Ctrl + u 向左删除字符至行首
Ctrl + k 同上一个命令,但向右删除
Ctrl + y 在光标处粘贴Ctrl + w等所删除的字符序列
Ctrl + t 交换光标前的两个字符
Alt + t 交换光标前的两个单词
Ctrl + -或者 Ctrl + xu 取消上次编辑动作
Ctrl + p 同方向键Up,显示上一个命令
Ctrl + n 同方向键Down,显示下一条命令
Ctrl + b 同方向键Left
Ctrl + f 同方向键Right
Ctrl + l(L) 清屏
Alt + b 光标左移一个word(连续非空字符串)
Alt + f 光标右移一个word
Ctrl + c 终止当前命令
Ctrl + z 将当前命令移至后台执行,fg可招回
Ctrl + d 终止当前会话
!! 重复上一个命令
Ctrl + r 搜索命令history
^foo^bar 替换上一个命令中的foo为bar并执行
cd – 返回上一个目录,alias — -=’cd -’后,-即可

为了使Tab补全时忽略字母的大小写,你需要在.bashrc中加入bind ‘set completion-ignore-case on’

Tags: .
Tags: .

  本文通过一个文件拷贝程序的三个不同实现,来说明标准库fread/fwrite、系统调用read/write在缓冲机制上的不同。系统调用没有缓冲(这里不考虑内核缓冲),拿write来说,它的原型int write(int fd, char *buf, size)。write将buf处的size个字节立即写入文件描述符fd指名的文件,而不经过任何缓冲。而C标准库中的f系列函数(fwrite/fread/fgetc/fputc)在FILE结构中内部维护了一个缓冲区(大小是多少?),通常情况下只有当这个缓冲区被写满时才会调用write将其真正地写入文件,fflush(FILE* stream)会强制将缓冲区内容写出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int
main (int argc, char **argv)
{
    int c; //~ fgetc()返回int
    FILE* fdin = fopen("51.tar.gz", "r");
    FILE* fdout = fopen("51.tar.gz.bak", "w");
    if (!fdout || !fdin)
    {
        fprintf(stderr, "open failure\n");
        exit(1);
    }
    while ((c = fgetc(fdin)) != EOF)
    {
        fputc(c, fdout);
    }
    fclose(fdout);
    fclose(fdin);
    return 0;
}
Tags: .
GDB调试命令
命令 描述
backtrace(或bt) 查看各级函数调用及参数
finish 连续运行到当前函数返回为止,然后停下来等待命令
frame(或f) 帧编号 选择栈帧
info(或i) locals 查看当前栈帧局部变量的值
list(或l) 列出源代码,接着上次的位置往下列,每次列10行
list 行号 列出从第几行开始的10行源代码
list 函数名 列出某个函数的源代码
next(或n) 执行下一行语句
print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
quit(或q) 退出gdb调试环境
set var 修改变量的值
start 开始执行程序,停在main函数第一行语句前面等待命令
step(或s) 执行下一行语句,如果有函数调用则进入到函数中
break(或b) 行号 在某一行设置断点
Tags: .

一个演示脚本

  下面的这个脚本修改自《A Practical Guide to Linux Command, Editions, and Shell Programming》。不提供参数时,它将标准输入输出到标准输出;提供一个文件名参数时,将该文件输出到标准输出;提供两个文件名参数时,它将提一个文件复制到第二个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /bin/sh
 
case $# in
    0)
        exec 3<&0 4>&1
        ;;
    1)
        exec 3<$1 4<&1
        ;;
    2)
        exec 3<$1 4>$2
        ;;
    *)
        echo "Usage: `basename $0` [source [dest]]"
        exit 1
        ;;
esac
cat <&3 >&4
exec 3<&- 4>&-
exit 0
Tags: .

  好久没写C++没用STL了,今天在STLChina泡了一下午。完整的代码只写了这么一个,贴上来吧。
  写了两个类,Max_Heap和Min_Heap,以他们特例化priority_queue,可以方便地实现最大、最小堆。写完了忽然又觉得这俩类似乎是多此一举了,完全可以用greater来实现最小堆,但由priority_queue的模板定义看出,那样就必须提供一个容器类型,比如vector
  最后还写了测试用例:找出n个数中最大的k个。

1
2
3
4
5
6
7
8
9
10
11
/*
template < class T, class Container = vector<T>,
           class Compare = less<typename Container::value_type> > class priority_queue;
 
explicit priority_queue ( const Compare& x = Compare(),
                          const Container& y = Container() );
template <class InputIterator>
         priority_queue ( InputIterator first, InputIterator last,
                          const Compare& x = Compare(),
                          const Container& y = Container() );
*/
Tags: ,,.

  Youtube走了,走吧,我用的不多。
  Blogger走了,走吧,我才刚开始用。
  Sites走了,走吧,我有自己的site。
  Facebook走了,走吧,我讨厌SNS。
  Twitter走了,走吧,我只是看客,忠实点罢了。
  Groups走了,走吧,我偶尔才去TL。
  Picasa走了,走吧,又不是非用不可。
  G.cn走了,走吧,我用.com。
  GReader也走了,走吧,我疯了。
  低调;
  我还是得低调,低调地做一个屁民,什么游行我都不参与。
  我还要感谢国家,是它给了我低调的自由,沉默的权利。
  I’m feeling fucky.
  对,我就是疯了。

Tags: .

  我家住在一个工厂的职工家属大院里,小时候一大帮年纪差不多大的孩子经常在一起玩。在我们这些人里面,有一个孩子比我们大好几岁,长得又高又壮,我们都得喊他老大,有什么好东西都得先孝敬他,有什么好事情都得先感谢他。他看谁不顺眼就经常骂几句踹两脚,因为我们打不过他,谁也不敢吭声,甚至还得在一旁叫好。不过老大也并不一直是这样,有时心情好了还是挺和善的。虽然也经常有人心里犯嘀咕,觉得这个老大不怎么样,但是据说是他保卫了我们的正常生活,而且据说以前的老大特别凶狠霸道,还有外面的更狠的老大们总来找麻烦,是我们现在这个老大把他们全都赶跑了,我们才有今天来之不易的幸福生活,想到这些,我们就觉得我们为他做些事,偶尔被他欺负一下,这些也都是理所当然的了。

  要说作为一个普通孩子的我看法,我是支持古哥的,我支持他是因为这么长时间以来终于出现了一个敢向老大挑战的人,无论他是阴谋家还是慈善家,我们总需要这样的变化,游戏才能玩得下去。不然的话,我们只能在老大的看管下日复一日地无知和愚昧下去。有人说,因为我们还很无知,所以不能什么都让我们知道,不然会出乱子,但我觉得恰恰是不让我们知道,才导致我们无知。所以我不接受这个倒果为因的解释,我不想在一段时间以后,外面的孩子看我们的眼光,就像我们现在看东北角那个邻居院子里的孩子们一样。

Tags: .
Page 10 of 31« First...6789101112131415...30...Last »