Archive for ‘Vim’ Category

September 17, 2011
  • G, gg: 光标移动至文件首/尾;
  • zz, zt, zb: 将光标所在行居中/置顶/置尾;
  • H, M, L: 定位光标到当前窗口的首/中/尾;
  • *, #, n, N: 向前/后定位当前光标所在word,n/N沿相应/相反方向重复定位;
  • ^a, ^x: 若当前光标所在word是数字,可递增/递减该数字,同时支持decimal和hexadecimal;
  • ^, g_: 即Shift+6,定位光标到当前行首/尾的第一个非空白字符;
  • ^d, ^t: insert模式下,缩进/反缩进当前行;
  • ^w: insert模式下,向后删除一个word;
  • ^y: insert模式下,复制上一行同列字符;
  • ^x^f: insert模式下,补全路径名;
  • ^x^n: insert模式下,补全tag(需要tags文件的支持);
  • ^x^l: insert模式下,补全行(根据已有行);
  • I, A: 定位光标至当前行首/尾,并进入insert模式,I会忽略行首空白;
  • D, C: 删除光标所在位置到行尾的字符,C会进入insert模式;
  • cib: 或者ci(或者ci),删除当前括号内的所有字符并进入insert模式。c还可以是d或者其他编辑字符,i还可以是a(此时会将括号一同删除),b还可以是B(大括号)、t(html标签)或者具体的配对符号,如(), [], {}, ”, “”, <>。
    参加:h text-objects;
  • %: normal模式下%会跳转至配对括号;
  • %: lastline模式下代表当前buffer的文件名,可以有许多修饰字符,例如:sp %:r.cpp会分割当前窗口,并打开当前文件对应的cpp文件,%:r代表文件名消除最后一个后缀之后的字符串。
    参见:h filename-modifiers;
  • :set op? : 显示选项op的当前值;
  • :set op! : 反转开关式选项op,比如:set nu!开关行号显示,:set paste!开关paste模式

注:
1. 非特别说明,命令均在normal模式;
2. 字符前的^指Ctrl;
3. 技巧来自于实践,技艺提升于运用。

Tags: . 3,226 views
July 10, 2011

  闲着也是闲着啊,来公司学习啊,好久没写博客了呀,欲望很强烈啊,那就写吧!我用Vim写啊,我骄傲啊,我还自己写了脚本啊,能用wiki语法写博客啊,写完可以自动处理成HTML啊,HTML啊!

  好啊,写了一个多小时啦,加了不少代码了啊,得处理一下啊,啊,怎么不行啊,自定义的命令找不到啦,啊,文件扩展名写错了啊,那就改名啊!

  苦逼的时候到了啊,为什么不保存文件退出到shell改啊,为什么装逼要在Vim里面改啊,提示我说会删除当前buffer啊,我说删除就删除啊,总得提示我文件没保存啊,尼玛它居然没提示啊,啥都没有啦!

Tags: . 615 views
June 11, 2011

  重装了系统,Vim升级到了7.3。
  之前,对于特定的文件类型建立了一些模版,类型的文件时候自动加载相应的模版。模版保存在$HOME/.vim/templates/下,比如C文件的模版为tpl.c。在.vimrc中有下面的配置:

1
2
3
4
5
function! LoadTemplate(extension)
    silent! :execute '0r $HOME/.vim/templates/'. "tpl.".a:extension
endfunction
" Load templates only when the file is NEW
au BufNewFile * silent! call LoadTemplate('%:e')
Tags: . 508 views
April 23, 2011

基本使用:

  • \di 进入画图模式;
  • \ds 离开画图模式;
  • 上下左右方向键,移动并画图;
  • Shift+上下左右方向键,只移动光标;
  • 空格键,打开/关闭擦除模式,擦除模式下,移动光标时光标处字符被空格取代;
  • >, <, ^, v,画箭头;
  • \>, \<, \^, \v,画粗箭头;
  • 可视化模式,即Ctrl + v后加motion后选中的文本块,可以使用下面快捷键:
    • \a 画箭头,区块开始处,指向区块结束处;
    • \b 画矩形框;
    • \c 画幕布,会提示行数,列数使用&textwidth选项,默认78列;
    • \e 画椭圆;
    • \l 划线。
  • 其他参考:h DrawIt。

  建议:类似上面框图,先画好框架,然后利用Vim的替换模式(普通模式下按R)进行标识。

Tags: ,. 2,534 views
February 22, 2011

  多数情况下,咱们编辑文档是逐行进行的。偶尔我们可能还需要按列编辑,比如项目编号,比如只有若干列不同的多行文本等。Vim为列模式编辑提供了比较“简洁”的支持,即可视化文本块(Visual Block)模式,它是三种可视化模式的一种(一种使用命令v按字符选取区域,一种使用命令V按行选取区域,另外一种就是这里的按矩形块选取区域,使用命令Ctrl-v)。例如,现在想要把一段C++代码中连续几行(比如3行)代码的某一列后面的部分注释掉,我们要做的就是把光标定位到该列,按下Ctrl-v,按两下j使该列3行高亮显示,再按下I,输入C++注释符//,然后按退出键,搞定,Vim会为你完成剩下的工作。关于Visual Block模式下可以进行的其它简单操作,可以使用:h visual-operators查看。
  但,简单的Vim命令的功能也仅限于此。若想完成更复杂的功能,就不得不动用高级一点的技巧了。比如为文档的每一行加上行号可以使用命令

:g/^/s//\=line(".")/    " 等价于:g/^/s/^/\=line(".")/

  解释一下:

  • :g/pat/,命令g查找模式pat(此处为^,行首,即每一行都会匹配),为每一个匹配行执行接下来的命令;
  • s/pat/str/,命令s在当前行查找模式pat,并使用str替代之;
  • \=,指示此处的字符串将由接下来的表达式的产生;
  • line(expr),函数line返回由字符串expr指示的行号,”.”代表当前行。
Tags: . 1,145 views
October 6, 2010

  写程序时,尤其在C/C++程序中,有大量的配对的符号(surrounding):( ), [ ], { }, < > ‘ ‘, ” “,另外标记语言(如XML)更是由无数的配对标记组成:,

. 如果能够快速地处理这些surroundings,就能大大提升编程的效率。
  Vim本身就有这种配对符号的能力,在Vim中这叫做text object,可以使用:h text-objects查看这些text objects。你会发现Vim只能对这些配对符所包含的文本或者整个text object进行删除和修改,却不能对surrounding进行修改,更不能为普通文本添加surrounding。
  既然有这种需求,就肯定会有热心人士努力,来满足这种需求,方便了自己,也方便了整个Vim用户群。Tim Pope同志就为Vim写了这款插件,surround.vim:

This plugin is a tool for dealing with pairs of “surroundings.” Examples of surroundings include parentheses, quotes, and HTML tags. They are closely related to what Vim refers to as |text-objects|. Provided are mappings to allow for removing, changing, and adding surroundings.

Tags: . 2,428 views
June 23, 2010

  代码中编辑一些配对符号内的内容是十分普遍的,这些配对符号包括:”, “”, (), {}, [], <>等等。Vim提供了一些命令来方便的编辑这些符号所包含的内容,将光标定位于某符号(如(或者)):

  • ci: 例如,ci(,或者ci),将会修改()之间的文本;
  • di: 剪切配对符号之间文本;
  • yi: 复制;
  • ca: 同ci,但修改内容包括配对符号本身;
  • da: 同di,但剪切内容包括配对符号本身;
  • ya: 同yi,但复制内容包括配对符号本身。
Tags: . 446 views
June 2, 2010

  我的.vimrc,贴出来给大家瞧瞧。有一些不太优雅的,或者个人色彩太强的,或者晦涩的,或者基于特定插件的部分已经被滤掉了。需要注意的是,对于gVim(Windows或者Linux/Unix),我把菜单栏和工具栏都隐藏了,不习惯的话把相关行注释即可。
  下面是一些键映射,仅供参考。

" escape for <ESC>
imap jj <esc>
" ' for `
map ' `
" save the file
" map <leader>w :w<cr>
map ,w :w<cr>
" quit
map ,q :q<cr>
" save and quit
map ,z ZZ
" yank from current line to the EOF
map ,yy "+yG
" paste from clipboard
map ,p "+p
" do substitution globally
map ,s :%s/
" do substitution in current line
map zs :s/
" roll up half screen
"map <tab> <C-u>
" roll down half screen
"map <space> <C-d>
" open the Calendar
map <F4> :Calendar<cr>
" open the NERDTree
map <F10> :NERDTree<cr>
" insert a \n
map ,<cr> i<cr><esc>
" Edit .vimrc
map ,,, :tabnew $HOME/.vimrc<cr>
Tags: . 1,351 views
May 22, 2010

  Esc是Vim爱好者使用非常频繁的一个按键。但,你不觉得它离你的左手有点远吗?我已经有很长时间没有使用这个键了,取而代之的是组合键Ctrl + [。但,Ctrl + [ 是不是有些麻烦呢?CapsLock,你常用到吗?我几乎不用。相反,CapsLock键就待在Tab键下面,一不留神就会按下,这在Vim下经常会导致一些莫名奇怪的现象。那我们就把它挪走吧!怎么挪?把它和Esc交换啊,但这里不是硬件的交换,你不用把Esc和CapsLock键抠下来交换,而只需要让OS把这两个键的映射对换一下即可。使用命令xmodmap可以完成此操作,xmodmap的具体用法,参考manpage。为了完成CapsLock和Esc的映射交换,你需要建立文件~/.Xmodmap:

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

然后,执行

xmodmap ~/.Xmodmap # 使映射生效
Tags: ,. 4,101 views
May 5, 2010

  这是一款供Vim使用的插件,看名字可以知道,它和The NERD Tree同属一个作者。使用这款插件,你可以对多种文件类型的文件进行不同方式地、快速地注释。这对使用Vim来写代码或者修改配置文件的同学来说,无疑是提升效率和快感的一件利器。你可以到这里来下载这个插件,将压缩包里面的doc/和plugin/文件夹丢到~/.vim/下面就是安装了。为了可以使用其帮助文档,你还需要在Vim中执行:helptags ~/.vim/doc/来注册。
  简单介绍下NERD Commenter的常用键绑定,以C/C++文件为例,详析的使用方法,请:h NERDCommenter。在Normal或者Visual 模式下:

  • ,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
  • ,cc,注释当前行
  • ,c,切换注释/非注释状态
  • ,cs,以”性感”的方式注释
  • ,cA,在当前行尾添加注释符,并进入Insert模式
  • ,cu,取消注释
  • Normal模式下,几乎所有命令前面都可以指定行数
  • Visual模式下执行命令,会对选中的特定区块进行注释/反注释
Tags: . 8,100 views
Page 1 of 212