Vim
目录
常用命令
`` 光标如何回到上一次位置 macvim 块前插入 ctrl+v进入列选模式,选中多列,按shift+i,首行输入#,按Esc取消 %s/,/,/g 替换 %s/§ \d\d-//g 替换正则
tabular
https://github.com/godlygeek/tabular
bookmarks
- vim 正则替换
- 简明 Vim 练级攻略 | 酷壳 - CoolShell.cn
- FencView.vim - Autodetect multiple encodings : vim online
- 解决win平台下gvim打开utf-8编码档案乱码问题 - 自由的谦仔 - 51CTO技术博客
vim 换行符
- %s/,/^M/g
注意那个^M在Gvim中是先按ctrl+q在按回车打出来的,
在Vim中是按ctrl+v再按回车才能打出来
迁移到Vim的10个难关
你必须得承认,每当你看到别人使用Vim,你就在想他是不是知道一些你不知道的事情。否则他为什么要用这么一个过时的编辑器,或者说开源垃圾?
除非你花至少一个月的时间每天使用这个编辑器,否则你是不会喜欢它的。这也是为什么很多新手会尝试一两天,然后就被它恶心到了,然后就永远不在碰它的原因。不幸的是,假如这些开发者能够挺过前期的痛苦,等待他们的将是无敌的速度和灵活性。
1.太多的模式可以选择 Vim和TextMate有很多不同,你常常会遇到它不让你输入,让你抓狂。Vim有很多不同的模式,在不同的模式下,不同的按键有不同的功能。更让人崩溃的是,大写和小写的功能也天差地别。 也许你很奇怪一个命令搞了半天就是为了删除五行文字。是的,但是当你掌握它后,你会发现编辑的速度快了很多。 2.古老的编辑器 Vim的年龄是很大的,超过30岁了!但是Vim是一直在被开发和维护的。最新的7.3版本是2010年发布的。还有,Vim和Vi是不一样的,如果你只用过Vi那么建议你试试Vim,你会有惊喜的。 3.我喜欢TextMate代码片段功能 你也许很快就会发现Vim不能胜任某项工作,但是很有可能某个插件已经实现了你想要的功能。例如TextMate代码片段(snippets)功能,Vim并没有这个功能,但是有一个snipMate插件可以实现一模一样的功能。 4.我不能使用上下键 首先,Vim是可以用上下键的,你说的可能是Vi。但是大部分Vim的用户不用这些按键: h,j,k,l被映射到了左,下,上,右: 没有选择-以前的机器没有上下左右按键 更少的移动-大部分情况你的手是在键盘的第二排,所以用这样的映射会让你的手尽量少的移动,可以让你更快的在文档的不同部分移动。 5.我是设计师! 是的,Vim并不适合每一个人。如果你经常和HTML,CSS打交道的话,Vim可能不适合你。不过你也可以尝试一下。也许Coda更适合你。 6.Vim并不提供我现有编辑器的功能 你错了,每一款编辑器都有它的长处。Vim的长处就是强大,灵活,有成千上百的插件,而且免费。几乎你能想到的功能,都有插件提供。
snipMate:可以让你输入+tab,展开整个div,超级好用! Surround:把一部分文字用标签括号等标记出来。 NerdTree:查看文件系统,打开文件或者目录。 TComment:简单快速的注释掉代码中的某些行。 Sparkup:类似ZenCoding,但同时也支持给元素赋值,比如: ul>li{My list item text.} 7.我的Vimrc文件是空白 这是我用Vim遇到的第一个问题。当你第一次启动Vim的时候,你会发现没有代码高亮,没有语法格式,没有自动缩进等等,什么都没有!刚开始的时候设置Vim的配置文件是比较头疼的,不过网上有很多现成的可以参考。 8.我不想使用命令行 我也是,还好有图形界面的Vim,比如MacVim,GVim。 9.没有老师学起来太累
请查看这个Venturing into Vim四周的课程。这个课程的特点是,我是在我学习Vim的时候录制的。 10.我不能编辑远程的文件 你当然可以,也许没有Coda那么友好,但是Transmit FTP插件是可以提供这个功能的。 当然,你有成千上万的理由拒绝Vim。它的学习曲线很高,需要你对代码编辑有一个全新的认识。但这些都不足以说明Vim不值得你认真学习一下!
editplus注册码
注册名:Free User
注册码:6AC8D-784D8-DDZ95-B8W3A-45TFA
vim的unix和dos的格式转换
很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位(称为回车, <CR>),另一个字符把纸上移一行(称为换行, <LF>)。
当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX开发者决定他们可以用<Line Feed>一个字符来表示行尾。Apple开发者规定了用<CR>。开发MS-DOS(以及微软视窗)的那些家伙则决定沿用老式的<CR><LF>。那意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。
如果你用往日美好的Vi来尝试编辑一个采用MS-DOS格式的文件,你将会发现每一行的末尾有个^M字符。(^M就是<CR>)。
Vim编辑器能自动识别不同文件格式,并且不劳你操心就把事情给办妥了。选项'fileformats'包含各种各样的格式,Vim会在编辑一个新文件之初尝试该选项定义得各种格式。
例如,下面这个命令告诉Vim先尝试用UNIX格式,其次,尝试
MS-DOS格式:
- set fileformats=unix,dos
编辑一个文件时,你将注意到Vim给出的信息消息报中包括文件所用得格式。如果你编辑的是本地格式文件(你编辑的文件格式和所用系统一致),你就不会看到任何格式名。因此在Unix系统上编辑一个Unix格式文件不会产生任何关于格式的信息。但你若编辑一个dos文件,Vim将这样通知你:
"/tmp/test" [dos] 3L, 71C
你可以用'fileformat'选项把文件从一种格式转换为另一种。例如,假定你有个名为README.TXT的MS-DOS文件,你要把它转换成UNIX格式。首先编辑这个采用MS-DOS格式的文件:
vim README.TXT
Vim将识别出那是一个dos格式文件。现在把这个文件的格式改为UNIX:
- set fileformat=unix
- write
这个文件就以Unix格式存盘了。
VIM查看文件编码文件编码格式转换文件名编码转换.
如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。
查看文件编码
在Linux中查看文件编码可以通过以下几种方式:
1.在Vim中可以直接查看文件编码
- set fileencoding
即可显示文件编码格式。
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
文件编码转换
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
- set fileencoding=utf-8
2.iconv转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
文件名编码转换:
从Linux往windows拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。
在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。
首先看一下你的系统上是否安装了convmv,如果没安装的话用:
yum -y install convmv
安装。
下面看一下convmv的具体用法:
convmv -f 源编码 -t 新编码 [选项] 文件名
常用参数:
-r 递归处理子文件夹
--notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
--list 显示所有支持的编码
--unescap 可以做一下转义,比如把%20变成空格
比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:
convmv -f UTF-8 -t GBK --notest utf8编码的文件名
这样转换以后"utf8编码的文件名"会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)
vim编码方式的设置
和所有的流行文本编辑器一样,Vim可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8等流行的Unicode编码方式。然而不幸的是,和很多来自Linux世界的软件一样,这需要你自己动手设置。
Vim有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding(这些选项可能的取值请参考Vim在线帮助:help encoding-names),它们的意义如下:
- encoding: Vim内部使用的字符编码方式,包括Vim的buffer(缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在.vimrc中改变它的值,事实上似乎也只有在.vimrc中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).
- fileencoding: Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式(不管是否新文件都如此)。
- fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将fileencoding设置为最终探测到的字符编码方式。因此最好将Unicode编码方式放到这个列表的最前面,将拉丁语系编码方式latin1放到最后面。
- termencoding: Vim所工作的终端(或者Windows的Console窗口)的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term的编码.这个选项在Windows下对我们常用的GUI模式的gVim无效,而对Console模式的Vim而言就是Windows控制台的代码页,并且通常我们不需要改变它。
好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看Vim的多字符编码方式支持是如何工作的。
1. Vim启动,根据.vimrc中设置的encoding的值来设置buffer、菜单文本、消息文的字符编码方式。
2. 读取需要编辑的文件,根据fileencodings中列出的字符编码方式逐一探测该文件编码方式。并设置fileencoding为探测到的,看起来是正确的(注1)字符编码方式。
3. 对比fileencoding和encoding的值,若不同则调用iconv将文件内容转换为encoding所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的buffer里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的iconv.dll(注2),你需要保证这个文件存在于$VIMRUNTIME或者其他列在PATH环境变量中的目录里。
4. 编辑完成后保存文件时,再次对比fileencoding和encoding的值。若不同,再次调用iconv将即将保存的buffer中的文本转换为fileencoding所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用iconv.dll由于Unicode能够包含几乎所有的语言的字符,而且Unicode的UTF-8编码方式又是非常具有性价比的编码方式(空间消耗比UCS-2小),因此建议encoding的值设置为utf-8。这么做的另一个理由是encoding设置为utf-8时,Vim自动探测文件的编码方式会更准确(或许这个理由才是主要的;)。我们在中文Windows里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为GB2312/GBK比较合适,因此fileencoding建议设置为chinese(chinese是个别名,在Unix里表示gb2312,在Windows里表示cp936,也就是GBK的代码页)。
VIM删除重复行1
要查找相同的两行,先将内容排序,然后查找前一行等于后一行者
- sort
/^\(.\+\)$\n\1
如此就找到了,博大精深的VIM
删除重复行(先排一下序):
- sort
- g/^\(.\+\)$\n\1/d
VIM删除重复行2
最近开始使用Vim,感觉此乃外人间之神器,怪不得那么多Vimer对其偏爱有加。现在说说文本中重读行删除问题。在众多的编辑器中Vim对正则的支持估计是最强大的了,很多高级的正则表达式在Vim中都是支持的。以下是我的解法:
- %s/\(.*\)\n\1/\1\r/g
- g/^$/d
这里需要两个命令,后再http://vim.wikia.com/wiki/Uniq_-_Removing_duplicate_lines找到了我的加强版:
- g/^\(.*\)$\n\1$/d
- g/\%(^\1$\n\)\@<=\(.*\)$/d
两者都是前面的命令和我的相似,它删除的是重复项的前面一项;后面的命令删除的重复项的后面的内容。注意两个命令独立的,可以分别使用。对于g命令不是很熟悉,它是一个全局命令,以后会有全面介绍。
第二个命令的解释:
g//d <– Delete the lines matching the regexp \@<= <– If the bit following matches, make sure the bit preceding this symbol directly precedes the match \(.*\)$ <– Match the line into subst register 1 \%( ) <— Group without placing in a subst register. ^\1$\n <— Match subst register 1 followed by end of line and the new line between the 2 lines
以上已经说得很明白了,不需要额外解释什么了。
VIM删除空白行
在命令状态下输入:
:g/^\s*$/d :g 代表在全文档范围内 ^ 代表行的开始 \s* 代表空白字符 $ 代表行的结束 d 代表删除
怎样用vi编程
vi +n filename 打开文件跳转的指定行数
vi +/xx filename 打开文件,跳转到含有内容的行
下一页 上一页 行首 行尾 文档首页 文档末尾
Ctrl+f Ctrl+b 0 $ [[ ]]
ctrl+g 报告当前行列信息
nyy 拷贝n行
- s/old/new/g
轻松替换一行里面的全部old—new,如果只替换第一个,去掉最后的/g,都是通用的正则了。
如果要替换指定范围内的行数,前面简单的加上就可以了
- 80,84s/create/delete/g
下面写的还没用过~看了大家的分享觉得这几个还不错
- n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
- n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
- n1,n2 d: 将 n1行到n2行之间的内容删除
在linux中, Ctrl+q = Ctrl+v
vim自动设置 textwidth 的问题
Vim启动时加载.vim 文件是有顺序的。
最终注释掉D:\Program Files (x86)\Vim\vim74\vimrc_example.vim里的
autocmd FileType text setlocal textwidth=78
就可以了。
vimrc
~/.vim/vimrc
syntax on set backspace=2 " allow backspacing over everything in insert mode set nu set autoindent " auto-indenting (when pasting type in :set paste to override) set shiftwidth=4 set tabstop=4 " Tab stop = 4 set softtabstop=4 set shiftround " round >> and << to shiftwidth set expandtab " Convert <tab> to spaces in insert mode colorscheme murphy set fenc=gbk set hls set fileencodings=ucs-bom,utf-8,cp936 let g:fencview_autodetect = 1 set nowrap set guifont=Bitstream_Vera_Sans_Mono:h11:cANSI set guifont=CascadiaCodeRoman-ExtraLight:h15 set nobackup set smartindent set cindent set cursorline set ruler set guioptions-=r set noundofile set textwidth=0