[Vim]用行号参与替换

一个小技巧。Vim有好处千种,”替换”只是其中一个。 除了强大的正则表达式,\=也是一个好用的工具。 比如要生成这么一个文件 This is number 1 This is number 2 This is number 3 This is number 4 This is number 5 This is number 6 This is number 7 This is number 8 This is number 9 This is number 10 方法当然有很多。用\=可以这么做: 先输入一行 This is number X 复制出另外9行 yy9p 得到 This is number […]

Linux Tips (1)

这里记录一些小技巧,比较杂。 1. bash下,x{a,b}会被展开为xa xb,很适合文件备份。 如果你要复制一份a.txt作为备份,到a.txt的路径又太长了,这么写比较方便。 cp /a/long/long/long/path/to/file/a.txt{,bak} 2. vim下,要把某些内容替换成为行号,可以用\=line(“.”)来处理。“.”用来连接行号和其它内容。 :%s/xxxx/\=line(“.”) . ” “/g 3. bash脚本下,如果要写多行到文件里,可以用 cat > file

vimGdb

又回到了用VIM的状态。刚装起来了vimGdb,vim的各种gdb插件还是这个比较顺手。唯一的不足之处是vimGdb需要给源码打一个Patch。 vim最新的稳定版本是7.3,对应的vimGdb在这里 larrupingpig/vimgdb-for-vim7.3 下面的说明比较清楚了,需要注意的是vim的源码必须是 vim-7.3.tar.bz2 这个包,如果是从最新的库里checkout的代码会和patch不匹配。 比如在~/Temp下有 vim-7.3.tar.bz2 vimgdb-for-vim7.3.tar.gz 解压 $tar xvf ./vim-7.3.tar.bz2 $tar xvf ./vimgdb-for-vim7.3.tar.gz 打patch $patch -p0 < ./vimgdb-for-vim7.3/vim73.patch 编译 $cd ./vim73 $./configure --enable-gdb $make $sudo make install 把./vimgdb-for-vim7.3/vimgdb_runtime/里面的文件拷贝到~/.vim/下 推荐使用Pathogen管理plugin,会比较方便一点 在~/.vimrc里增加一句 source ~/.vim/macros/gdb_mappings.vim 然后就OK了。编译代码的时候用-gstabs+让gcc把调试的信息加上去。 具体请参看vimGBD的文档。这里也行:gdb.txt P.S. 大神们真无聊啊,居然把vim移植到iOS上去了...Vim iOS

[Tips]2011-10-30

vim的paste mode 我们会遇到这样的情况: 需要从Vim之外的其它程序里拷贝一大段文字,然后在Vim里粘贴。 一般的,启动vim之后,按i进入插入模式 (Insert Mode),然后粘贴就行了。 但是当Vim的配置越来越多,插入模式下粘贴大段文字时可能会遇到各种诡异的情况。 因为这个时候的粘贴就相当于手动输入这些内容,于是各种映射 (Mapping) 就被触发了…. :set paste 可以启动一种paste模式,这个时候各种Mapping会被无视,各种自动缩进也无效。和在记事本里粘贴效果一致。 paste命令也符合Vim的通常规范 :set nopaste 可以关掉它。

[Tips]2011-10-19

两个Vim的小技巧 :] 其实就是两个正则表达式,刚好今天用到了,就记下来。 1. 有多行文本,其中有几行是URL,要保留这几行URL,其它的行删掉。 :g!/:\/\//d g本来是用来做grep类似的事情的,:g/pattern 会显示出符合pattern的所有行 惊叹号!表示相反,就是指选中的行是不符合pattern的。后面的/d是表示删掉选中的行。 2. 有多行文本,每行都是类似这样的 keyA=valA&keyB=valB&keyC=valC 现在要交换key和val的位置,变成 valA=keyA&valB=keyB&valC=keyC :%s/\=\/\2=\1/gi %s是全局替换,这个比较常用了。\是不太常用的anchor字符(锚字符),分别表示word的开始和结束。 \(..\)也比较常用了,可以保存匹配结果。\w*表示一个或多个word字符。 word字符包括a-zA-Z _ 和 0-9 :]

[Vim]vim的几种模式和按键映射

Map是Vim强大的一个重要原因,可以自定义各种快捷键,用起来自然得心应手。 vim里最基本的map用法也就是 :map c a 这里把c映射成了a,在map生效的情况下,按下c就等同于按下了a 当然,常用的Ctrl,Shift,Alt自然也是支持的。 令Ctrl+a对应到a :map a 令Alt+a对应到a :map a 令Ctrl+Alt+a对应到a :map a 到此,我们已经可以做很多事情了。 但是map命令远不只这一种,在不同的模式下,同一组按键可以被映射到不同的组合上。 Vim的模式众多,但是一般被提及的也就是这么几种: Normal Mode 也就是最一般的普通模式,默认进入vim之后,处于这种模式。 Visual Mode 一般译作可视模式,在这种模式下选定一些字符、行、多列。 在普通模式下,可以按v进入。 Insert Mode 插入模式,其实就是指处在编辑输入的状态。普通模式下,可以按i进入。 Select Mode 在gvim下常用的模式,可以叫作选择模式吧。用鼠标拖选区域的时候,就进入了选择模式。 和可视模式不同的是,在这个模式下,选择完了高亮区域后,敲任何按键就直接输入并替换选择的文本了。 和windows下的编辑器选定编辑的效果一致。普通模式下,可以按gh进入。 Command-Line/Ex Mode 就叫命令行模式和Ex模式吧。两者略有不同,普通模式下按冒号(:)进入Command-Line模式,可以输入各种命令, 使用vim的各种强大功能。普通模式下按Q进入Ex模式,其实就是多行的Command-Line模式。 对于Map,有几个基本的概念 命令的组合 同Vim下的其他命令一样,命令的名字往往由好几段组成。前缀作为命令本身的修饰符,微调命令的效果。 对于map而言,可能有这么几种前缀 nore 表示非递归,见下面的介绍 n 表示在普通模式下生效 v 表示在可视模式下生效 i 表示在插入模式下生效 c 表示在命令行模式下生效 Recursive Mapping 递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。 […]

Vim Encoding

每次新装VIM都得设置编码相关的选项,记在这里备忘吧。 encoding: VIM内部编码,也就是内容在VIM内部的表现形式。 fileencoding: 文件读写编码,在打开文件时VIM认为此文件是采用fileencoding所指的编码,于是会进行编码转换,转换为encoding所指编码。 fileencodings: 一个编码序列,VIM依次尝试其中的编码,看看是否能成功转换为encoding所指编码。 termencoding:terminal采用的编码,vim如果要输出到terminal,会将文件转码为termencoding所指编码。 在Linux下,八子一般采用 let &termencoding=&encoding set fileencodings=utf-8,gbk,ucs-bom,cp936 感谢: http://edyfox.codecarver.org/html/vim_fileencodings_detection.html