vim作为linux下的经典editor,它的学习的确让我挣扎过,尤其是当我想打字可屏幕却毫无反应的时候,我很失望,于是发誓再也不碰这东西了。
几年来,我一直使用notepad++作为我的主要代码编辑器,所以工欲善其事,必先利其器。作为代码工匠,程序员往往需要一个能够一个能够提供浏览,搜索,编辑等方面强大的功能。而notepad++这几年的发展的确在这方面不断推陈出新,受到了很多程序员的喜爱。
但是,notepad++毕竟是win平台下的(估计收了MS好处),所以在linux下我急需一个能让我顺手的工具。其实选择并不多,无非就是command based, 比如emacs,vim 或是一个common editor user interface的工具(比如KDE下的kate),我思来想去,如果不使用前两个的其中一个,我很有可能会被同事鄙视,所以我开始对vim和emacs做了一个小比较,觉得vim虽然指令复杂,但是毕竟不用去搞lisp,可是emacs却还要再去学个没几个人用语言,投资成本比较高。于是,就先选择了vim作为学习的目标。
0-1 小时
其实就是了解下vim的历史,wikipedia是一个不错的source,里面信息比较全面,但是其实也对实际操作没什么大用,但是至少知道vim的大概工作原理和设计理念。
1-3 小时
在google上发现 Efficient Editing With vim 一文,地址如下,http://jmcpherson.org/editing.html, 看完以后,感触加深了,于是按照文中的操作理念练习了一下,发现有点明白了,可是还是老忘记指令,于是还是有点着急,毕竟这样的程度还是属于低效率的,根本无法顺利展开工作。
3-6 小时
我回想起了wiki上的内容,vim是可以customize的,既然我已经熟悉了notepad++的环境,为什么不能把我想要的功能map到vim上呢。于是开始了一段有趣的客制过程。
首先想到那些syntax highlights,这些不用说,Efficient Editing With vim 的作者在blog里的其他问章里已经给出一些,剩下的google一下基本就都出来了。
于是继续想加Google search,代码折叠,自动完成,显示行号这些基本的都搞定了。小庆祝一下,可是仔细一想,notepad++好像还有很多功能我还没移植过来,比如Tab浏览,鼠标双击自动搜索加highlights,而且一个很有用的功能,ctrl+S 保存文件。
其实,google一下,vim的gui版本gvim可以实现tab浏览,双击自动搜索加highlights也有现成的key mapping script, 直接复制,保存,启动gvim,呵呵,这些东西都有了。
6-10 小时
其实之前的工作已经可以完全应付工作需要了,但是还有些小细节我觉得不太满意,输入模式要按i, 而我觉得space键更好。
Tab虽然不错,可是现在所有的主流浏览器都是ctrl+T 开新Tab,Ctrl+W 关闭Tab,我发现gvim里面有个分页浏览,也就是说你可以任意横竖分割一个Tab里面的页面去显示你的各种文件。我想Notepad++里面的goto another view是vertical分页的,那我就用shift+T 来做同样的事吧。当然我还另加了ctrl+shift+left/right 用来快速切换Tab,这个也算是比较intuitive了。
鼠标滚轮在分页浏览的时候,我们有时需要同步滚动,这功能好像notepad++没有快捷键,我就设定为shift+鼠标中键去toggle,这样同步和不同步就随心所欲了。
最后,一个column selection, notepad++是Alt+leftmouse, 当然vim也就直接map了。
10-12 小时
经过那么一段时间的练习加客制,vim的使用已经很顺手了。其强大程度已经和notepad++一样,剩下的应该就是加强学习,掌握新功能了,这方面而言,notepad++只能靠作者来实现,而有了vim,我则可以随时DIY。
这也许就是高手们都喜欢vim的原因吧。
12-24
累了一天了,该睡觉了。一天征服了vim,该知足了。
=======================================
.vimrc 文件内容 (我的系统没有设Alt的keybinding,所以没有Alt组合的快捷键,你可以修改相关部分以满足自己的需求)
vim wiki 里面有很多设置代码,你在里面search可能比google 更快http://vim.wikia.com/wiki/Vim_Tips_Wiki
" set editor colors
:colors torte
:syntax enable
"setting from Jonathan's tutorial
:set nocompatible
:set autoindent
:set smartindent
:set showmatch
:set ruler
:set incsearch
:set tabstop=4
:set shiftwidth=4
":set vb t_vb=
" code folding
:set foldmethod=syntax
:set nofoldenable
" code typing
:set showmatch
:set matchtime=8
" show line number
:set number
:nmap <C-N><C-N> :set invnumber<CR>
:set numberwidth=3
":set cpoptions+=n
:highlight LineNr term=bold cterm=NONE ctermfg=Green ctermbg=NONE gui=NONE guifg=Green guibg=NONE
:set wrap!
" tab navigation
map <C-S-Left> :tabp<CR>
map <C-S-Right> :tabn<CR>
map <C-T> :tabnew<CR>
map <C-W> :close<CR>
map <S-T> :vsp<CR>
" page navigation
set scb!
map <S-MiddleMouse> :set scb!<CR>
map <S-Left> F
map <S-Right> f
map <C-Up> (
map <C-Down> )
map <A-Left> 0
map <A-Right> $
" files
" Use CTRL-S for saving, also in Insert mode
:imap <c-s> <Esc><c-s>
if has("gui_running")
" If the current buffer has never been saved, it will have no name,
" call the file browser to save it, otherwise just save it.
:map <silent> <C-S> :if expand("%") == ""<CR>:browse confirm w<CR>:else<CR>:confirm w<CR>:endif<CR>
endif
"search
"map <2-LeftMouse> :normal *<CR>, this version jump cursor to next search result
map <2-LeftMouse> :let @/ = expand("<cword>")<CR>:set hlsearch<CR>
:hi Search guifg=black guibg=white
map <RightMouse> `.
"Editing
map <Space> i
map <C-LeftMouse> <C-V>
No comments:
Post a Comment