公司是基于linux下面的开发,编辑器那么多,很烦人,个人想精通一个编辑器,以不变应万变,于是开始了vim之旅。
先学习简单的vim操作,后来firefox也装上vim的插件了,但觉得还是不够,大部分的工作还是在win下其他编辑器下完成。
vim的路还长得很,这篇文章,我坚信坚持vim,是正确的,而且中将给带来更大的好处。
1、公司的linux上,vim是统一有的,但各个用户自己登陆,于是乎第一个要解决的,要不然自己装个vim,要不然通过一些特殊的选项,个性化自己的配置。需要的有两个,一个是配置,第二个是很多的插件。
a:个人的配置在 :~/.vimrc 上添加就可以了
b:插件,这个还没有解决,应该是 runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/
~下创建.vim目录即可。明天到公司去试试。
2、vim的路径,可以在vim中执行 :echo $VIMRUNTIME 来获得。
一般是:/usr/share/vim/ 或者 /usr/local/share/vim/ 下,你也可以自己安装一个,通过编译的时候 ./conf~ prefix 来指定。
3、bin目录:echo $PATH,可以用whereis vim来查看,还可以启动一个vim进程,然后获得其进程号,之后lsof下。
/bin/vim
/usr/bin/vim
/usr/local/bin/vim
$home/bin/vim
4、插件:
a、NERDTree:文件列表
:NERDTree 或在vimrc里面做映射:map <F1> :NERDTreeToggle<CR>
b、MiniBufExplorer:把buffer列出来
修改下映射快捷键
noremap <silent> <leader>m :call <SID>CycleBuffer(1)<CR>:<BS>
noremap <silent> <leader>n :call <SID>CycleBuffer(0)<CR>:<BS>
,这样 /m,/n,(我用的是,m , ,n)就有切换buffer的功能了
在结合原始的 :b $number 基本够用。
个人觉得这个除了显示出来,其他还是有点鸡肋。
c、taglist
<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
<Space> 显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
<F1> 显示帮助
快捷键
——————————————————————————————————————————————————————————————————————
gvim,也是一种选择,注意了
1、vim下载安装&中文help文档,略。
2、vim的环境问题:
- :set runtimepath? ::可以查看vim的插件生效位置,有五个,这个地方 http://edyfox.codecarver.org/html/vimpluginspath.html这个地方介绍得比较详细
-:echo $VIM ::vim运行的路径,安装路径
-:echo $VIMRUNTIME :: vim运行插件路径,系统级的
-gvim 用户自定义插件路径文件夹: %HOME%/vimfiles/
-gvim用户自定义配置文件位置:%HOME%/_vimrc
-session:
- 会话信息中保存了所有窗口的视图,外加全局设置。
- :mksession [file] ::创建,缺省 Session.vim
- :source session-file :: 载入保存的session信息
-viminfo:
- viminfo信息中保存了命令行历史(history)、搜索字符串历史(search)、输入行历史、非空的寄存器内容(register)、文件的位置标记(mark)、最近搜索/替换的模式、缓冲区列表、全局变量等信息。
- :wviminfo [file] ::创建,其实每次vim退出的时候都会在~/目录里面写如一个.viminfo(_viminfo)的文件
- :rviminfo [file]::读入
-encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的 Buffer、消息文字等。在Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文 Windows环境下encoding的默认设置是cp936(GBK)。
-fileencodings(fenc):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。
-fileencoding(fencs) :Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。
-termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。
4、工作路径:这个方法还不错 http://blog.chongtang.me/index.php/1053
cd : 改变vim的当前工作路径
lcd: 改变当前窗口的工作路径
pwd: 查看当前的工作路径
set autochdir: 自动设当前编辑的文件所在目录为当前工作路径
lsat、插件:终于到我待解决的问题了。
- 继续编辑,最困扰我的还是buffer在窗口展示的问题,今天看到IDE编辑环境,一般由两大类。
最好的办法是:都尝试下,反正不差这些时间。-- 一个是winmanager 相关的解决方案 映射到 F9-F12
--另一个是trinity 的相关解决方案 映射到F5-F8
+winmanager 好像比较简陋
map <c-w><c-f> :FirstExplorerWindow<cr>
map <c-w><c-b> :BottomExplorerWindow<cr>
map <c-w><c-t> :WMToggle<cr>
默认功能是左边文件夹list和bufferlist
+trinity插件,目标是把vim改造成一个si一样的编辑器,si确实好像这方面舒服很多。
-srcexpl.vim http://www.vim.org/scripts/script.php?script_id=2179 如果有tags,通过tags查看光标所在变量/函数的定义,这边用php代码做实验,好像不那么准确,而且,到了那个位置后,如果找到有定义,光标会移动到第一行,不爽。
这里是摘录的配置:
" // The switch of the Source Explorer
nmap <F8> :SrcExplToggle<CR>
" // Set the height of Source Explorer window
let g:SrcExpl_winHeight = 8
" // Set 100 ms for refreshing the Source Explorer
let g:SrcExpl_refreshTime = 100
" // Set "Enter" key to jump into the exact definition context
" let g:SrcExpl_jumpKey = "<ENTER>"
" // Set "Space" key for back from the definition context
let g:SrcExpl_gobackKey = "<SPACE>"
" // In order to Avoid conflicts, the Source Explorer should know what plugins
" // are using buffers. And you need add their bufname into the list below
" // according to the command ":buffers!"
let g:SrcExpl_pluginList = [
\ "__Tag_List__",
\ "_NERD_tree_",
\ "Source_Explorer"
\ ]
-taglist.vim就是生成taglist的插件了
cmd:TlistToggle
-trinity最后的插件
" Open and close all the three plugins on the same time
nmap <F8> :TrinityToggleAll<CR>
" Open and close the srcexpl.vim separately
nmap <F9> :TrinityToggleSourceExplorer<CR>
" Open and close the taglist.vim separately
nmap <F10> :TrinityToggleTagList<CR>
" Open and close the NERD_tree.vim separately
nmap <F11> :TrinityToggleNERDTree<CR>
这插件单独似乎没有什么问题,但是,但和minibufer插件一起用时,经常卡死在那个地方,很奔溃,还不知道怎么调试。
-minibufexplorer
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
-Vimball 管理插件的插件,如果下载是vba格式的插件的话,用vim打开,:so %,就安装好了,比较方便。
-visualmark.vim
已经绑定 mm 设定标识,F2下一个标识,shift+F2上一个标识,ctrl+F2删除标识,还是有一定作用。但插件内绑定按键,还是不太好的。
简单,才是最好的。
目前的设置,比较简单
F5 - 目录 - 屏幕左边
F6 - 查看代码定义 - 屏幕下方
F7 - 文件buffertablist - 屏幕上方
F8 - taglis - 屏幕右边
和vim的方向键一致。需要用什么单独调什么。也避免相互之间引起的窗口错乱的情况。
之前,我比较纠结窗口相互牵涉,导致vim窗口错乱,甚至挂死的情况,总想找到一种非常ok的彻底的解决方法。也经常在寻觅,忽略了起本身优秀的地方。问题总是有的,看到它好的并不断加以放大,避免其不好的,日子照样过,情况还好很多。所谓扬长补短,多朴实的道理啊。但真要做起来,要克服自己追求完美的心态。
-The NERD Commenter 注释 http://vim-script-cn.googlecode.com/svn-history/r16/trunk/script_1218.html
不知道说什么好,确实很好用。
这两天试着坚持在vim写php,小项目,一边调试一边学习使用vim
从注释到缩进,到文件之间跳转,到宏的使用,不得不说,很爽。两只手开始不知道放在哪里好,后来则非常高效的投入到编码工作中。避免鼠标东点点,西点点。集中注意力。good feel。
vim 是一种习惯,也是一种思想。