VIM整理文档具备很是好的效果,我最近因为开发的须要,在网上收集了大量有关中中医的文章,须要整理优化调整成须要的格式,存入数据库中供前端调用。使用过WORD,excel等工具都不尽如意,后来使用VIM,真是又快又方便。
1.获取文件特别是中文档会有不少编码问题而显示不对,统一使用utf8编友。查看文档编码并设置文件上应编码utf8
获取编码
set fileencoding
设置编码及语言
set encoding=utf-8
set langmenu=zh_CN.UTF-8
让vim自动识别文件编码(能够自动识别UTF-8或 者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,若是没有找到合适 的编码,就用latin-1(ASCII)编码打开。
set encoding=utf-8 fileencodings=utf-8
2.以指定的编码打开某文件
如打开windows中以ANSI保存的文件
vim file.txt -c "e ++enc=GB18030"
在Vim中直接进行转换文件编码,好比将一个文件转换成utf-8格式
:set fileencoding=utf-8
3.查看文件格式是win仍是linux,换行符不一样,服务器以linux和unix为主,减小中间环节,改成unix
:set fileformat?
设置文件格式为 unix
:set fileformat=unix
4.偶尔修改一下十六进制和库和应用程序,Vim下以16进制查看, 修改文本
vim -b filename
在命令行模式下, 输入如下命令:
:%!xxd
修改完成之后,一样在命令行模式下使用如下命令能够返回正常的格式:
:%!xxd -r
注意,只有左侧16进制被修改的部分会生效,对于右侧字符的修改不会产生效果。前端
5.设置显示行号
set number
6.存入数据时,一些无用的不可见字符会影响存储和解析,设置显示不可见字符,而后去掉
set invlist
7本身定义不可见字符的显示方式
set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
set list
4.有些状况下单行显示更清晰,更容易把握文件之结构,设置单行,取消单行
直接在vi的命令模式中输入:
set wrap
若是想取消,就输入:
set nowrap
5.我会把文件内容转为数组,现使用程序写入数据库,删除空格行会找数组更紧凑
非编辑状态下输入:g/^$/dlinux
6.删除行首空格,这个用于对齐:
非编辑状态下输入:%s/^\s*//g正则表达式
7.删除行尾空格:
非编辑状态下输入:%s/\s*$//g数据库
8.排序
:sort
9合并两行
普通模式下,按 J (大写),助词符是(Join)。会把下一行合并(join)到当前行上来
使用vim编辑:将文本复制进来
先合并两行数据
:g/^/j
10缩进
所有格式化 : gg=G
对当前行格式化(缩进): ==
对如下多行格式化(倍数操做): [count] ==
选择多行后, 执行 等号命令 =
11shift+v 转到可视模式
shift+g 全选
12.ddp 光标所在行跟下面一行进行交换
xp 光标所在的字符后面一个字符进行交换
13在每行行首或行尾添加/删除内容
添加
在每行行首添加相同的内容:vim
:%s/^/要添加的内容windows
在
每行行尾添加相同的内容:数组
:%s/$/要添加的内容服务器
利用正则表达式删除代码段每行的行号
:%s/^\s*[0-9]*\s*//gc工具
其中,^表示行首,$表示行尾,\s表示空格,[0-9]表示0~9的数字,*表示0或多个,%s/^\s*[0-9]*\s*//gc的意思是将每行以0或多个空格开始中间包含0或多个数字并以0或多个空格结束的字符串替换为空。
!
14重复上次普通命令
. 只有一个点优化
@: 重复上次ex命令。
@@ 重复执行。
15代码块左移,右移
<<
>>
16删除空行
:g/^\s*$/d
简单解释一下:
g :全区命令
/ :分隔符
^\s*$ :匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行
1. 替换当前行中的内容: :s/from/to/ (s即substitude)
:s/from/to/ : 将当前行中的第一个from,替换成to。若是当前行含有多个
from,则只会替换其中的第一个。
:s/from/to/g : 将当前行中的全部from都替换成to。
:s/from/to/gc : 将当前行中的全部from都替换成to,可是每一次替换以前都
会询问请求用户确认此操做。
注意:这里的from和to均可以是任何字符串,其中from还能够是正则表达式。
2. 替换某一行的内容: :33s/from/to/g
:.s/from/to/g : 在当前行进行替换操做。
:33s/from/to/g : 在第33行进行替换操做。
:$s/from/to/g : 在最后一行进行替换操做。
3. 替换某些行的内容: :10,20s/from/to/g
:10,20s/from/to/g : 对第10行到第20行的内容进行替换。
:1,$s/from/to/g : 对第一行到最后一行的内容进行替换(即所有文本)。
:1,.s/from/to/g : 对第一行到当前行的内容进行替换。
:.,$s/from/to/g : 对当前行到最后一行的内容进行替换。
:'a,'bs/from/to/g : 对标记a和b之间的行(含a和b所在的行)进行替换。
其中a和b是以前用m命令所作的标记。
4. 替换全部行的内容: :%s/from/to/g
:%s/from/to/g : 对全部行的内容进行替换。
5. 替换命令的完整形式: :[range]s/from/to/[flags]
5.1 s/from/to/
把from指定的字符串替换成to指定的字符串,from能够是正则表达式。
5.2 [range]
有如下一些表示方法:
不写range : 默认为光标所在的行。
. : 光标所在的行。
1 : 第一行。
$ : 最后一行。
33 : 第33行。
'a : 标记a所在的行(以前要使用ma作过标记)。
.+1 : 当前光标所在行的下面一行。
$-1 : 倒数第二行。(这里说明咱们能够对某一行加减某个数值来
取得相对的行)。
22,33 : 第22~33行。
1,$ : 第1行 到 最后一行。
1,. : 第1行 到 当前行。
.,$ : 当前行 到 最后一行。
'a,'b : 标记a所在的行 到 标记b所在的行。
% : 全部行(与 1,$ 等价)。
?chapter? : 从当前位置向上搜索,找到的第一个chapter所在的行。(
其中chapter能够是任何字符串或者正则表达式。
/chapter/ : 从当前位置向下搜索,找到的第一个chapter所在的行。(
其中chapter能够是任何字符串或者正则表达式。
注意,上面的全部用于range的表示方法均可以经过 +、- 操做来设置相对偏
移量。
5.3 [flags]
这里可用的flags有:
无 : 只对指定范围内的第一个匹配项进行替换。
g : 对指定范围内的全部匹配项进行替换。
c : 在替换前请求用户确认。
e : 忽略执行过程当中的错误。
注意:上面的全部flags均可以组合起来使用,好比 gc 表示对指定范围内的 全部匹配项进行替换,而且在每一次替换以前都会请用户确认。