2012年6月20日星期三

vim的空格tab配置

vim中shiftwidth, tabstop, softtabstop和expandtab的意义

from: ludonghai715
1 shiftwidth
这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是符号移位长度的制定者。
2 tabstop定 义tab所等同的空格长度,一般来说最好设置成8,因为如果是其它值的话,可能引起文件在打印之类的场合中看起来很别扭。除非你设置 了 expandtab模式,也就是把tabs转换成空格,这样的话就不会一起混淆,不过毕竟制表符为8是最常用最普遍的设置,所以一般还是不要改。
3 softtabstop如 果我们希望改变程序中的缩进怎么办?shiftwidth和tabstop不一样的话,你会发现程序比较难看的。这时候,softtabstop就起作用 了。可以从vim的说明中看到,一旦设置了softtabstop的值时,你按下tab键,插入的是空格和tab制表符的混合,具体如何混合取决于你设定 的softtabstop,举个例子,如果设定softtabstop=8, 那么按下tab键,插入的就是正常的一个制表符;如果设定 softtabstop=16,那么插入的就是两个制表符;如果softtabstop=12,那么插入的就是一个制表符加上4个空格;如 果 softtabstop=4呢?那么一开始,插入的就是4个空格,此时一旦你再按下一次tab,这次的四个空格就会和上次的四个空格组合起来变成一个 制表符。换句话说,softtabstop是“逢8空格进1制表符”,前提是你tabstop=8。
4 关于expandtab举个例子,在多人一起开发项目时,为了使代码风格尽量保持一致,一般不允许在代码使用TAB符,而以4个空格代之。我们可以编辑一个文件,包含下面的内容:
set shiftwidth=4
set expandtab
然后把下面的命令加入到.vimrc中:
autocmd FileType c,cpp set shiftwidth=4 | set expandtab
就可以只在编辑c和cpp文件时实行这种设置了


set autoindent ruler 启用自动缩进
filetype plugin indent on 允许载入indent插件
再set 查看下syntax与shiftwidth的值,syntax应为javascript shiftwidth为2, 4, 8等

2012年6月15日星期五

pywin32 xp下安装错误

在 python 中 import win32api 时出现

?
>>> import win32api
Traceback (most recent call last):
  File "", line 1, in
ImportError: DLL load failed: 找不到指定的模块。
>>>
解决方法:
拷贝
C:\Python26\Lib\site-packages\pywin32_system32\*

C:\Windows\System32

2012年6月13日星期三

gdb thread

info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。 thread apply all command 让所有被调试线程执行GDB命令command。 set scheduler-locking off|on|step 估计是实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试 程序执行呢?通过这个命令就可以实现这个需求。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。

2012年6月10日星期日

宏编译错误的解决

g++ -I../h -DENABLE_TRACE_LEVEL  -E ../h/CmTraceFromT120.h  > error

然后去error里去看看就知道了

2012年6月8日星期五

python导入出问题解决方案

没别的,路径问题,查看环境变量设置是否正确。

另外,通过这个命令查看路径

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

其实就是sys.exec_prefix

另外,
error: AccessInit: hash collision: 3 for both 1 and 1.
这个问题,也是PYTHONPATH设置的问题,
设置为如下“c:\python26\Lib"就可以。其他OS类似。 

2012年5月24日星期四

编程语言教学项目

1. http://pleac.sourceforge.net/ 各种语言的教程,看了一下python,还不错。

2. https://learn-python-the-hard-way-zh_cn-translation.readthedocs.org/en/1.0/intro_zh.html

3. http://www.codecademy.com/ 现在有python,ruby,web,javascript/jquery等,有空可以学习一下。

javascript的原型继承

参考:
http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/
http://javascript.crockford.com/inheritance.html

1. 原型继承的所谓原型是一个对象。
2. javascript的function才有prototype属性,这个属性存储的是原型对象的引用,这个主要是为了创建对象时,使用原型对象进行初始化新对象。
3. 在实现中,如firefox,每个对象都有一个__proto__的属性(function也是一个对象,继承的原型是Function)。这个属性也是指向原型对象的引用,只不过是由javascript内部维护的,在创建新对象时,javascript内部会将其赋值为prototype属性(this.__proto__ = fn.prototype, fn为声明的function名称),当访问对象的变量或方法时,如果该对象没有声明次变量或方法,则去__proto__指向的原型对象中去找。prototype属性只是提供给javascript的使用者提供的一个设置原型对象的途径,所有的类似访问对象,或instanceof之类的操作,都是依赖__proto__属性完成的,所以,如果把prototype属性重新复制为一个新的对象,由于是通过__proto__去找的,所以如果不相应的修改__proto__,是找不到对应的属性的。(具体见下面的例子)


01var A = function(name) {
02    this.name = name;
03}
04
05var a = new A('alpha');
06a.name; //'alpha'
07
08A.prototype.x = 23;
09
10a.x; //23

01var A = function(name) {
02    this.name = name;
03}
04
05var a = new A('alpha');
06a.name; //'alpha'
07
08A.prototype = {x:23};
09
10a.x; //null