VIM配置 3

Posted by Linuxtty on 七月 05, 2010

今天不知怎的又折腾起vim配置。每次打开.vimrc来看的时候都觉得这上百行的配置,最后自己记得并且用得到的功能可能连20%都不到=。=
but,多点功能总比少了的好,防患于未然啊,未雨绸缪啊神马的心理作祟,还是把配置给“堆叠”起来了。

插件:
NERDTree
taglist
supertab
bufexplorer
minibufexpl
vimwiki
python_fn(一直没用上,当初以为是解决py缩进问题的插件,结果是py的class,def代码块的操作插件。Usage)
IndentAnything(貌似这东西,现在py都不担心缩进的问题了)
winmanager(放了很久,也没怎么用到这东西)

关于文件浏览的插件就有三个了:winfileexplorer.vim(winmanager自带的),netrw(vim标准插件),nerdtree。winfileexplorer貌似目录结构啊,文件删减之类的变化不会有反应。netrw可以。nerdtree才开始试用,网上推荐的也较多吧。

参考:
vi/vim使用进阶: 目录

配置文件如下:

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>General
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

" With a map leader it's possible to do extra key combinations
" like <leader>w saves the current file
let mapleader = ","
let g:mapleader = ","

" Hightlight end of line whitespace.
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/

" Search
set hlsearch
set incsearch
nmap <leader>sn :noh<cr>

" Sets how many lines of history VIM has to remember
set history=300

" Set fileencodings
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

" Set statusline
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
set laststatus=2

" Enable filetype plugin
filetype plugin on
filetype indent on

" Set to auto read when a file is changed from the outside
set autoread

" Fast saving
nmap <leader>w :w!<cr>

" Fast editing of the .vimrc
map <leader>e :e! ~/.vimrc<cr>

" When vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc

"Fast reloading of the .vimrc
map <silent> <leader>ss :source ~/.vimrc<cr>

" Setting path
set path=.,/usr/include,,/usr/share/vim/vim72/**

" Moving
set whichwrap=s,<,>,[,] " 光标从行首和行末可以跳到另一行

" Setting seesionoptions
"set sessionoptions-=curdir
"set sessionoptions+=sesdir

"Switch FlieTab
"When edit a new file,switch to new tab
function! SwitchToBuf(filename)
    "let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
    " find in current tab
    let bufwinnr = bufwinnr(a:filename)
    if bufwinnr != -1
        exec bufwinnr . "wincmd w"
        return
    else
        " find in each tab
        tabfirst
        let tab = 1
        while tab <= tabpagenr("$")
            let bufwinnr = bufwinnr(a:filename)
            if bufwinnr != -1
                exec "normal " . tab . "gt"
                exec bufwinnr . "wincmd w"
                return
            endif
            tabnext
            let tab = tab + 1
        endwhile
        " not exist, new tab
        exec "tabnew " . a:filename
    endif
endfunction

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
" => Files and backups
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
" Turn backup off, since most stuff is in SVN, git anyway...
set nobackup
set nowb
set noswapfile

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>User Interface
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
syntax enable "代码高亮
set showcmd
set showmatch " 括号匹配 Show matching brackets.
set matchtime=5 " 匹配时间 time=0.1s
set smartcase " Do smart case matching
set mouse=a " Enable mouse usage (all modes)

set fdm=manual " foldmethod代码折叠(manual,indent,expr,syntax,diff,maker)
set number " 显示行号
set autoindent " 自动缩进

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Tab indent related
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
set tabstop=4 "Tab宽度
set expandtab "Tab转换为空格
set shiftwidth=4 "缩进宽度
set smarttab "智能删除Tab

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Tab control
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"map <leader>tn :tabnew %<cr>
"map <leader>tc :tabclose<cr>
"map <leader>tm :tabmove

" PHP
"autocmd FileType php set tabstop=8 | set expandtab | set shiftwidth=8 | set smarttab

" Python
autocmd BufRead *.py nmap <F6> :!python % 

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Omni Complete
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
set completeopt=longest,menu

inoremap <expr> <CR> pumvisible()?"\<C-Y>":"\<CR>"
inoremap <expr> <C-J> pumvisible()?"\<C-N>":"\<C-X><C-O>"
inoremap <expr> <C-K> pumvisible()?"\<C-P>":"\<C-K>"
inoremap <expr> <C-U> pumvisible()?"\<C-E>":"\<C-U>"

"set completeopt-=preview
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Maps
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

" Tag List Open/Close
map <silent> <F9> :TlistToggle<cr>

" Netrw Open
" nmap <silent> <leader>fe :Sexplore!<cr>
" NERDTree
map <F2> :NERDTreeToggle<cr>

" Open BufExplorer
nmap <silent> <C-b> <leader>be

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Ctags
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"set tags = tags
"nmap <F3> :!ctags -R

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Tag List
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
let Tlist_Ctags_Cmd = '/usr/bin/ctags' "设定linux系统中ctags程序的位置
let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
let Tlist_File_Fold_Auto_Close = 1 "taglist只显示当前文件tag,其它文件的tag都被折叠起来
let Tlist_GainFocus_On_ToggleOpen = 1 "使用:TlistToggle打开taglist窗口时,输入焦点在taglist窗口中

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>netrw setting 文件管理器
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
let g:netrw_winsize = 30
nmap <silent> <leader>fe :Sexplore!<cr>

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>SuperTab
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>BufExplorer
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
let g:bufExplorerDefaultHelp=0 " Do not show default help.
let g:bufExplorerShowRelativePath=1 " Show relative paths.
let g:bufExplorerSortBy='mru' " Sort by most recently used.
let g:bufExplorerSplitRight=0 " Split left.
let g:bufExplorerSplitVertical=1 " Split vertically.
let g:bufExplorerSplitVertSize = 30 " Split width
let g:bufExplorerUseCurrentWindow=1 " Open in new window.
autocmd BufWinEnter \[Buf\ List\] setl nonumber

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>miniBufExpl
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
let g:miniBufExplTabWrap = 1
let g:miniBufExplMapWindowNavVim = 1 " 可以使用<C-h,j,k,l> 切换到上下左右窗口
let g:miniBufExplMapWindowNavArrows = 1 " 可以使用<C-箭头键>切换到上下左右窗口

" <C-Tab>    向前循环切换到每个buffer 上,并在当前窗口打开
" <C-S-Tab>   向后循环切换到每个buffer 上,并在当前窗口打开
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>winmanager
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"
"let g:winManagerWindowLayout = "FileExplorer"
"let g:winManagerWidth = 30
"let g:defaultExplorer = 0
"nmap <silent> <leader>wm :WMToggle<cr>
"nmap <C-W><C-F> :FirstExplorerWindow<cr>
"nmap <C-W><C-B> :BottomExplorerWindow<cr>

"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"=>Vimwiki
"'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
let g:vimwiki_use_mouse = 1
let g:vimwiki_CJK_length = 1
let g:vimwiki_list = [{'path': '~/vimwiki/',
            \ 'path_html': '~/vimwiki/html/',
            \ 'auto_export': 1,
            \ 'html_header': '~/vimwiki/html/header.tpl',
            \ 'html_footer': '~/vimwiki/html/footer.tpl',}]

激活Google Voice 1

Posted by Linuxtty on 六月 12, 2010

貌似已经2个月没写过东西,已经不知道可以写些什么了。每次想写点啥,都说算了算了,过段时间再写吧。结果要写的时候也忘记要去记录啥了。再加上最近一个月真是烦得要死。就更加懒了。

毕竟花了银子买域名买主机,多少还是照顾下自己的好=。=不能对不起花了的银子。

话说前几天通宵的时候,突然收到封邮件,一看是GoogleVoice的邀请。顿时兴奋(其实激活后也还不懂去用这东西),网上搜刮激活邀请的教程。翻了好几篇博文,都提到说去 http://www.virtualphoneline.com/ 注册个免费试用号,然后设置呼叫转移到Gtalk上去。照着注册并设置后,GoogleVoice呼叫virtualphoneline的试用号,Gtalk并没有反应。

每个教程基本都是一个模板的╮(╯-╰)╭差点就放弃了,再说用到GoogleVoice的机会基本上没有嘛。

还好最后看到说要在Gtalk联系人里面加入service@gtalk.gtalk2voip.com,加好后,virtualphone的呼叫转移就生效了。然后输入GoogleVoice的验证码即可。

PS:关于在Gtalk里面输入验证码的方法,有说逐位发送,有的说一次输入完全发送。个人体验的时候是,逐位发送失败,一次性发送验证码成功。

附谷奥教程一篇:http://www.google.org.cn/posts/how-to-signup-google-voice-in-china-mainland.html

====End====

熬夜伤身啊。

一点小问题:emerge mldonkey 6

Posted by Linuxtty on 四月 15, 2010

今天remerge mldonkey的时候提示要降级,大约是今早删了某个overlay的缘故。

降就降嘛,接着在configure的时候,卡在某个地方了。提示:

——————————–
Checking Ocaml compiler.
——————————–
checking for ocamlc.opt… /usr/bin/ocamlc.opt
checking for i686-pc-linux-gnu-ocamlc… /usr/bin/ocamlc.opt
checking for camlp4… /usr/bin/camlp4
Need build
******** Objective-Caml 3.10 is required *********
******* Check http://caml.inria.fr/ ********
Do you want this script to try to download and install ocaml
LOCALLY in mldonkey directory ?

接着输入y或者yes也都没反应。看了下系统上的ocaml,版本是3.11.2。不至于版本高了就不行了吧,降级某个软件,能不牵扯到其他部件最好,升级或者增加倒还能接受,让其他包降级就不好了。

Google了下,看到说修改ebuild,将ebuild里面的ocaml版本改了就好。于是乎就把mldonkey弄到自己的overlay里面去修改。
打开ebuild文件,看到里面有一行“–enable-ocamlver=3.10”,改成3.11.2就可以重新emerge了。

最近笔记本上wifi的诡异问题 4

Posted by Linuxtty on 四月 14, 2010

这两个星期一直都纠结于笔记本wifi启动的问题,发现这个问题是点开wicd界面的时候提示搜索不到wifi信号,可是路由就在旁边>_<,于是乎尝试:

sudo ifconfig wlan0 up
SIOCSIFFLAGS: Unknown error 132

ifconfig也只列出了eth0和lo,没有wlan0。刚开始碰倒的时候摸不着头脑,以为是驱动的问题,后来想想初装Gentoo的时候也是直接就用wifi了,不需要考虑驱动的问题啊。lspci | grep net的结果是:

02:00.0 Ethernet controller: Atheros Communications Inc. AR5001 Wireless Network Adapter (rev 01)
05:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8055 PCI-E Gigabit Ethernet Controller (rev 12)

记得Atheros是直接编译进内核了的。就没再去纠结驱动这方面了。

直接Google“SIOCSIFFLAGS: Unknown error 132”,粗略看了下搜索结果,都提到rfkill这个工具。看人家是rfkill unblock all之流就完了。但是我rfkill list,提示soft block: no ;hard block:yes。要软的还好,硬的问题该怎么解决啊?而且来回block和unblock几次都发现影响的是soft block的结果,猜是不是要重启下,于是unblock一次之后就重启机器看结果了。

重启的时候想着还是给wlan0通电的,以保证真的是hard unblock了吧(猜是不是由于wlan没通电的结果?),还有个原因是因为以前ubuntu的时候,不管硬件上通电与否,进入到ubuntu下面都是可以搜索wifi的。硬件上电源通断根本不影响。重启完毕进到CLI下面,嗯wifi灯还亮着,就尝试在CLI下面先ifconfig wlan0 up/down,发现正常启动和关闭。然后这时候还保持无线通电的情况下startx进入到GUI,开终端依然ifconfig wlan0 up/down几次发现也正常,看下wicd也可以正常搜索信号了。而且这个时候开关本子的wifi,指示灯也跟着亮灭,就放松了下。

然后尝试关闭本子的wifi电源,然后ifconfig wlan0 up/down,发现down了之后就没法再up了,提示的错误跟最开始提到的一样。再给本子wifi通电发现wifi指示灯不亮了。

后面再重启机器实验几遍(很X疼),总结下整体情况,现象就是在CLI登录前(俺是startx方式进gui,没用gdm之类的)wifi必须通电,如果登录前wifi没通电,之后就再没法打开wifi了。登录前如果wifi通电,那么登录后硬件上随便开关wifi都不会影响信号的搜索。但如果这时候ifconfig wlan0 down恰好wifi没通电,那么就不能再up了。

以前用ubuntu的时候也是,本子wifi开关都不会影响信号搜索>_<。但至少没现在这样折腾,必须在登录前打开本子的wifi电源。

无解。不知道这个现象是什么原因引起的?

=============

在家的时候只用无线,到学校了只用有线,所以这样的情况到最近才发现的,囧。

松口气 6

Posted by Linuxtty on 四月 13, 2010

最近两个星期都在做网络综合课程设计的项目,最初的时候啥都没准备,然后慢慢开始按着错误的IP分配方案开始做起来,然后在PC上用packet tracer模拟。从项目中还是学到不少东西,基本的配置操作,问题,故障的分析和解决等等,总之是没打酱油的。做项目倒还不错,问题在三天两头往实验室跑着实辛苦,一过去基本上就扎在里头了,一整个下午,甚至连累到晚上>_<。做项目期间没神马心情去看其他的东西了。

今晚总算是收工了,没说完工是因为最后项目检查的时候发现初期的准备没做好,部分要求没达到。另外是有部分配置不知道怎么用实验室的设备验证。周末有空再把整个项目好好总结下好了。

收工了大可稍微松口气,可以把注意力转一下了。

PS:对贱兔下面的无线问题还是无解。莫名奇妙的就出事了,wicd搜不到网络,wlan0接口没法开启:( 折腾啊。

去掉Nginx的一个警告

Posted by Linuxtty on 三月 27, 2010

自己机器上装的是Nginx,每次开机启动nginx的时候总会弹个警告出来:

[warn]: 8192 worker_connections are more than open file resource limit: 1024

曾google过一个方法,照着弄也没成功,就一直放着没理了。

今晚看GReader,突然看到篇文章,想着触类旁通,就手动试试了。

sudo vim /etc/init.d/nginx

在启动脚本开头加上:

ulimit -n 65535

重新启动nginx,警告消失了:P

顺带想起某人说过的:“这叫walkaround,不是solution”

无题 3

Posted by Linuxtty on 三月 24, 2010

痛

交钱那一刻,痛。这数量可以买蛮多书的。

某人比我重修得早,醒悟得也早。这学期在为奖学金努力ing……

差距啊。

——-分割线——-

才发现blog上贴的代码都没有缩进,不知所以然。换过插件,主题,尝试手工空格缩进也被吃了。-.-
甚无语……WP版本2.9.2

Read it later 3

Posted by Linuxtty on 三月 18, 2010

昨晚通宵,到现在才睡醒,这时间点上貌似也做不了什么事情,恰好在Reader上看到keke写了篇文章,介绍如何在手机上通过rss阅读器阅读Reader上喜欢的文章。

在GReader中,由于标签和目录是混在一起的,曾经因为给文章随意加tag导致后面tag一堆杂乱,管理上非常麻烦,所以到后面整理过一次,将tag精简为几个,就再也没动过了。keke的方法是通过设定一个tag为public feed,然后给自己的喜欢的文章加上这个tag,然后手机端订阅这个public feed进行阅读。

问题是,喜欢的文章不一定都在Reader上,可能在网上进行搜索,或者浏览的时候会碰到喜欢的文章,但也不至于会为此而跑到Reader去订阅再加tag吧?

之前同步控推荐了一款阅读辅助工具——Read it later

首先,拥有Firefox扩展,有iphone,Android,Blackberry,塞班的手机端,也可以通过在书签栏保存js代码来使用,简言之就是支持各大主流浏览器按钮扩展,支持各大主流移动设备。

二、当你在网上看到喜欢的文章,或者这篇文章暂时没有时间去阅读,需要mark一下。这时候read it later就派上用场了,将文章标记起来,待有时间的时候从read it later的列表里面点击链接,重新打开文章进行阅读。手机端的软件也会将这个列表同步,同时也可以选择将文章下载下来,很轻松的进行阅读。

三、其Firefox拓展,可以嵌入到GReader里面去,每篇文章标题前都会多出一个按钮,想要推迟文章阅读的话,直接点击图标即可。非常的方便。

地址栏旁边也有按钮,方便标记网页:

我在G1上的客户端是paperdroid,免费用户的话,后台同步只能设置每24小时一次=。=比较悲剧,也有好的地方,paperdroid不仅可以同步read it later的list,也可以设置同步GReader的星标文章。如果不使用Read it later的话,单用来同步GReader上喜欢的文章也是可以的:) 下面是QR码:

PCManFM右键解压rar

Posted by Linuxtty on 二月 24, 2010

才解决了侧栏显示可挂载分区的问题,又碰到了新的问题。PCMan不能右键解压rar文件。zip,tar,bz2,gz之类的都好好的。唯独rar不行。唉,又要折腾一下了。

最早看到的解决方法在一阁狐狸那,谁知一时半会没看明白。后来明白要修改源码,汗!

另外今天也Google到一篇鸟文解决方案,很详细。

pcmanfm已经emerge过一遍了,直接去/usr/portage/distfiles/里面找源码包拷贝一份,解压,修改。结果make的时候各种错误,就去掉一段注释代码,不至于弄出这么多搞头吧。最后是卸了装,装了卸,拼RP似的给make install上去了,囧rz…

让pcmanfm支持右键解压rar文件,要做的就是修改源码包里面src/ptk/ptk-file-archiver.c文件,vim搜一下rar就可以找到注释代码了,在64行左右。除了像yegle说的去掉注释符号外,还要修改unrar的解压参数,把’unrar -o- e’改成’unrar -o- x’。unrar的e参数很囧,把压缩包里面的所有文件全部展开解压到当前目录下面。当时不知道,拿一个rar文件来测试的时候就悲剧了>.<

需要支持7zip的文件解压的话,再在后面加一段代码吧。

      {
           “application/x-7z-compressed”,
           “7zr a -bd -y”,
           “7zr x -bd -y”,
           “.7z”, TRUE
       }

要实现这两个功能的前提是安装了unrar和p7zip。

另外,归档管理器即file-roller,平时用Ubuntu的时候都没留意软件叫啥名字=。=!

End:其实现在的FM有两个,一个是Nautilus,一个是PCManFM。Nautilus还是很稳健的,PCManFM不熟,问题不断,果断卸之又不爽。非得折腾出个结果才罢休啊。玩的就是一个折腾……还有还有,为毛作者注释掉那段代码啊?

让文件管理器侧栏显示可挂载分区 1

Posted by Linuxtty on 二月 23, 2010

寒假一直在用Gentoo,桌面环境没太多设置,草草的解决了下Gentoo的字体设置问题,顺便装了awesome就完了。本想体验现awesome这个平铺式的窗口管理器,结果用到现在,貌似也没怎么体会到精髓处。sigh~

鉴于此,打算在开学回校之前把桌面环境弄好。就把WM切换成Openbox了,这openbox相比awesome还是很好配置的。然后装了tint2做panel,Conky沿用Ubuntu时期的配置,虽然配色和现在的壁纸看起来有点不和谐。接着问题出在了文件管理器上,pcmanfm和nautilus都试了,两者的侧栏让我感觉很不适,跟Ubuntu的效果不一样,硬盘上其他可挂载分区都没有显示出来。不能即点即挂了。这很不方便啊,不可能每次都去用命令行挂载啊>.<,改fstab开机一次全挂载上来也不爽啊,一是没必要,二还要自己建文件夹去。昨天google了半天都没结果,也没心情折腾了。

问题在绞尽脑子想的之后偏不能解决,不去想的时候解决办法就来了。无意Google了下“Gentoo 自动挂载”就出来了,先在这帖子最后一层看到引用,想着无聊,就顺路爬过去看看原始问题是怎么描述的,没想到和我碰到的问题是一样的,修改文件后重启,然后打开FM一看,哇塞,分区显示出来了XD。高兴之余再回去爬一下那帖子,发现,楼主是TX Orz…

解决方法:打开/usr/share/hal/fdi/policy/10osvendor/99-storage-policy-fixed-drives.fdi
修改:

<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->

<deviceinfo version="0.2">
<device>
  <match key="@block.storage_device:storage.hotpluggable" bool="false">
    <match key="@block.storage_device:storage.removable" bool="false">
      <merge key="storage.automount_enabled_hint" type="bool">false</merge>
      <merge key="volume.ignore" type="bool">false</merge>
    </match>
  </match>
</device>
</deviceinfo>

重启完事。:)