neocomplcache与其他一些插件还真难相处阿

无聊装了个neocomplcache试下,初步用下来感觉效果的确不错,不过要和 snipMate superTab zencoding插件和谐共存还是要设置一下。。。

首先如果你不需要让他自动启用 (不加 let g:NeoComplCache_EnableAtStartup = 1),或者不需要让他自动弹出提示 (加了 let g:NeoComplCache_DisableAutoComplete = 1),那似乎就不用设置什么了。

如果用了 zencoding.vim,那么vimrc里面不要有 let g:use_zen_complete_tag = 1 ,如果加了这句会使NeoComplCache自动启用那句没做用。。。

另外如果要 snipMate 和 superTab的话,也要修改下,因为snipMate为了与superTab兼容,在提示菜单弹出的时候是不会展开的,即使你修改了触发snipMate的热键也没用,他只会执行superTab的动作。。。

所以我就想把snipMate为了兼容superTab的代码去掉。
打开 ~/.vim/plugin/snipMate.vim 134行开始

134
135
136
137
138
139
140
if pumvisible()
  if exists('SuperTabKey')
    call feedkeys(SuperTabKey) | return ''
  endif
  call feedkeys("\<esc>a", 'n') 
  call feedkeys("\<tab>") | return ''
endif

---------------- 2010-08-22 更新 --------------
根据snipMate在github中的最新代码,从149行,开始,从新调整一下TriggerSnippet函数,并且下面再增加一个小函数

149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
fun! TriggerSnippet()
	if exists('g:SuperTabMappingForward')
		if g:SuperTabMappingForward == "<tab>"
			let SuperTabKey = "\<c-n>"
		elseif g:SuperTabMappingBackward == "<tab>"
			let SuperTabKey = "\<c-p>"
		endif
	endif
 
	if exists('g:snipPos') | return snipMate#jumpTabStop(0) | endif
 
	let word = matchstr(getline('.'), '\S\+\%'.col('.').'c')
	for scope in [bufnr('%')] + split(&ft, '\.') + ['_']
		let [trigger, snippet] = s:GetSnippet(word, scope)
		" If word is a trigger for a snippet, delete the trigger & expand
		" the snippet.
		if snippet != ''
			if exists('g:loaded_neocomplcache')
				let g:neocomplcache_disable_auto_complete = 1
				inoremap <ESC> <ESC>:call SetNeocomplBack()<CR>
				snoremap <ESC> <ESC>:call SetNeocomplBack()<CR>
			endif
			let col = col('.') - len(trigger)
			sil exe 's/\V'.escape(trigger, '/\.').'\%#//'
			return snipMate#expandSnip(snippet, col)
		endif
	endfor
 
	if exists('SuperTabKey')
		call feedkeys(SuperTabKey)
		return ''
	endif
	return "\<tab>"
endf
 
fun! SetNeocomplBack()
	let g:neocomplcache_disable_auto_complete = 0
	inoremap <ESC> <ESC>
	snoremap <ESC> <ESC>
endf

-----------------------------------------------

这几句注释掉后就行了,不管是否兼容了,反正用了NeoComplCache自动提示,superTab的作用也体现不出多少了,主要是为了可以用tab键来选择提示菜单中的项目。
还有个办法不需要修改snipMate的代码就是修改superTab的热键,但是如果改掉的话那还能叫superTab不? 哈哈
这里也有个参考,不过他是把NeoComplCache的自动提示关闭了。
http://sinolog.it/?p=1399

Ubuntu 10.04窗口延迟的补丁

装了Ubuntu 10.04后,如果是ATI显卡并且开启compiz效果,窗口在最大化,调整大小的时候还是会出现延迟的问题。
加入下面的ppa源然后更新下系统,重启xserver后可以解决这个问题。
https://launchpad.net/~info-g-com/+archive/xserver-xorg-1.7.6-gc

相关参考:
[Lucid][Ubuntu 10.04][ATI cards] Slow/freeze windows management (resize, maximise, .etc) with fglrx driver + compositing desktop.

http://www.phoronix.com/forums/showthread.php?t=21846&page=2

破问题 官方啥时候可以修复阿 – -

几个深色背景和大字体的 userstyles

不知道老外的眼睛是不是特别好,字体都喜欢搞得像蚂蚁那样小,又是白色背景,nnd 老子眼睛看久了实在受不了。

幸好有Stylish这样的玩具,我把几个自己常看的技术文档网页调成了深色背景,自己感觉看着舒服些了。

如果你和我有同样的屁好,就能直接用了。

userstyles适用于Firefox的Stylish和Google  Chrome的Stylish

使用apache2-mpm-itk为apache的虚拟主机指定单独的用户运行

在用Python和django写一个类似github的程序,当然功能是非常少的,目前只想做到可以创建git仓库,自行管理ssh公钥还有些基本的权限控制。

在ssh公钥管理这里,其实就是管理Linux用户目录下的.ssh/authorized_keys文件,当用户提交公钥时,向这个文件里写入公钥内容。

authorized_keys的权限设置非常严格,只有当除了用户自己可以有写权限外,组权限和其他权限都不能有写入的权限才行,否则这个文件就无效,即使把公钥写入这个文件,通过ssh登录到该用户时还是需要输入密码,这是ssh出于安全的考虑,防止由于用户自己对权限设置不当而造成安全问题。

但是现在我要通过web界面管理这个文件,那么读写这个文件的用户就是运行web服务器的用户,一般来说运行apache的用户是www-data,那么就无法写入了,我本身对apache也只会一些最基本的配置,然后就搜阿搜。。。

搜到一个suexec,然后装啊,设置阿,测试阿,弄了半天不是太明白,也没成功,运行虚拟主机的用户仍旧是www-data。

然后继续搜阿搜,找到个文章: Running apache2 virtualhost with different users

然后按照里面说的装了 apache2-mpm-itk

$ sudo apt-get install apache2-mpm-itk

在apache的VirtualHost里加入

<IfModule mpm_itk_module>
   AssignUserId git git
</IfModule>

AssignUserId 后面2个参数一个是运行该虚拟主机的用户,另一个就是组。
我把所有git仓库都放在一个叫git的linux用户目录下作为git服务器,所以AssignUserId就是 git git。

最后把django项目下的所有文件的用户和组都设置为git,重启apache,测试后果然就可以了。

使用这个mpm_itk非常方便,之前搜到的suexec我虽然没弄成功过,但是了解下来似乎python程序要通过fastcgi方式运行才行。

我现在django的运行方式是,apache+mod_wsgi,用mpm_itk后同样可以达到效果了。

记录下我在win下配置git的过程

首先下载安装msysgit,安装过程一般使用默认选项即可。不过如果团队中可能有使用Linux unix等非windows系统的话,最好选择 Use unix style line endings

msysgit装完就能用命令行的方式玩git了,如果需要一个类似乌龟svn的GUI工具,可以装下 tortoisegit

现在基本就能在本地玩git了。

如果是在一个团队中,要参与合作开发,一般是需要生成ssh key,然后把公钥发给git服务器管理员,让管理员给你设置权限。这样才能push或pull。

打开 msysgit 的cygwin窗口 ,可以双击桌面上的图标,也可以在任何文件夹上右键 选 Git Bash Here
输入 ssh-keygen -t rsa -C "xxx@xxx.com" 并回车(-C 后面的引号里就输入邮箱地址好了…),如果你不清楚回车后提示你输入的是啥,就一直回车直到完成好了。

然后到 系统盘你的用户目录里的.ssh目录下,比如 C:\Documents and Settings\Administrator\.ssh ,把里面的 id_rsa.pub 文件发给管理员,如果使用类似github的git服务提供网站,就把那个文件里的内容添加到账户的SSH Public Keys里。

最后在乌龟git里设置2样东西

首先进入Network选项,把ssh client的程序设置为msysgit安装目录里的bin/ssh.exe ,如下图

然后进入Config,输入你的名字和Email,再勾上下面的Save as globa,就行了,以后你做了提交,在git log的Author就是你这里设置的名字和Email。

完喽,这样在Win下就基本配置完了一个git客户端。