Tag Archives: vim

Mac 安装cscope编译问题解决办法

今天晚上在Mac上安装cscope插件时,碰到一个编译问题。虽然最近在编译一个C++工程时也碰到不少编译的问题,但是对于今天碰到的这个问题,还是第一次碰到。具体情况如下:

在编译cscope-15.7a版本的代码,make这一步时抛出如下错误

In file included from build.c:50:
/usr/include/ncurses.h:539:40: error: macro “cbreak” passed 1 arguments, but takes just 0
/usr/include/ncurses.h:564:44: error: macro “erasechar” passed 1 arguments, but takes just 0
/usr/include/ncurses.h:600:43: error: macro “killchar” passed 1 arguments, but takes just 0
make[2]: *** [build.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

于是grep一下cscope的源码,找到constants.h中含有这几个方法。代码如下:

#if (BSD || V9) && !__NetBSD__ && !__FreeBSD__
# define TERMINFO 0 /* no terminfo curses */
#else
# define TERMINFO 1
#endif

#undef TERMINFO 0
#define TERMINFO 1

#if !TERMINFO
# ifndef KEY_BREAK
# define KEY_BREAK 0400 /* easier to define than to add #if around the use */
# endif
# ifndef KEY_ENTER
# define KEY_ENTER 0401
# endif
# ifndef KEY_BACKSPACE
# define KEY_BACKSPACE 0402
# endif

# if !sun
# define cbreak() crmode() /* name change */
# endif

# if UNIXPC
# define erasechar() (_tty.c_cc[VERASE]) /* equivalent */
# define killchar() (_tty.c_cc[VKILL]) /* equivalent */
# else
# define erasechar() (_tty.sg_erase) /* equivalent */
# define killchar() (_tty.sg_kill) /* equivalent */
# endif /* if UNIXPC */
#endif /* if !TERMINFO */

看这段代码,只要让TERMINFO为1,即可不使用这几个函数。于是加上上面蓝色的两行,即可通过编译。

Vim替换小技巧

用Vim很长时间了,但是面对这个牛B的编辑器,始终不敢说熟悉Vim。最近就碰到几个靠Google才搞定的问题,特记录之。

  • Vim正则表达式匹配中文字符:[^\x00-\xfff],同理可以得出匹配非中文字符的正则表达式了:[\x00-\xfff],配置出来后就很容易做替换了。
  • 利用Vim替换文件中的英文的大小写
    • 将文件全部大写字符替换成小写字符: ggguG ,即可,开始的gg是将光标移动到文件开头,gu是预转换为小写,G是将光标移动到最后一行。
    • 将某行替换掉, nGgu<回车> n为行号,G表示跳转到该行号去,gu表示预转换,回车表示移动到下一行。

利用Vim配置完美的Python开发环境

上上周末参加活动时一个同学分享的Vim让我重新燃起折腾Vim的兴趣,经过一周多的学习,实践,已经完全被Vim给征服了。最近刚好在学习Python,一直没有找到一个好的IDE,目前主要是用TextMate。经过这两天的努力,发现通过Vim的各种插件,可以配置出一个完美的Python开发环境,比TextMate还要强大得多。主要的插件配置如下(基本的Vim配置省略):snipMate + Pydiction.

其中snipMate 提供代码模板支持,和TextMate中的代码模板类似,通过Tab键补全;
Pydiction 提供Python关键字及标准库函数的补全,和Eclipse对Java的方法补全功能类似;

snipMate 安装:
如果你是Linux,可以直接通过cpan安装vimana,然后通过vimana安装snipMate,这样自己就不需要什么配置了。
同时vimana也支持其它插件的安装。如果没有的话,就需要手动安装,步骤如下:
1.从http://www.vim.org/scripts/script.php?script_id=2540下载snipMate.zip;
2.将文件解压到~/.vim目录下
3.修改~/.vimrc文件,增加set filetype plugin on
这样snipMate就安装完毕了,可以在~/.vim/snippets/目标下看到支持的语言

安装Pydiction步骤:
1.到http://www.vim.org/scripts/script.php?script_id=850下载Pydiction-1.2.zip文件;
2.解压后,按照说明将python_pydiction.vim放到~/.vim/after/ftplugin/目标下;
3.将complete-dict文件放到~/.vim/dict/目标下
4.修改~/.vimrc文件,增加下面两行:
filetype plugin on
let g:pydiction_location = ‘~/.vim/dict/complete-dict’

python_pydiction中还有一个pydiction.py的文件,这个是用来生成数据字典的,新加一个python库,生成一下,
具体教程可以看官方的说明。
这样配置完了之后,会发现snipMate与pydiction都是使用Tab键补全,会存在冲突。通过修改其中一个
的快捷键可以解决这个冲突。我选择修改pydiction的快捷键,修改方法如下:
打开python_pydiction.vim文件,找到这行
inoremap <silent> <buffer> <TAB>
修改为下面这样,就可以通过Ctrl+n来进行补全了。
inoremap <silent> <buffer> <C-n>

经过这样的配置,写起python程序就得心应手了。