vim :学习笔记

复制粘贴保持格式


set paste
nnoremap  :set invpaste paste?
imap  :set invpaste paste?
set pastetoggle=

两个常用的指令序列


 
   
xp       左右交换光标处两字符的位置
ddp     上下交换光标处两行的位置

执行宏命令脚本merge.vim


在VIM编辑器中按如下键      :so merge.vim 回车
merge.vim 脚本
"------------------------------------------
:1     
:map = ma/!!!!!^M+:.co 'a-1^M/!!!!!^M2+:.m'a^M+=


ma           将数据文件一的第一行标记为a
/!!!!!^M     找到标志行,置为当前行
+            光标下移一行,即把标尺行置为当前行
:.co 'a-1^M  把标尺行复制到标记行(数据文件一的第一行)的上方
2+           光标下移2行
=                        是典型的递归调用,重复完成以上步骤
"------------------------------------------

在文件中置入行号


脚本
:%s/^/^I/           每一行的行首添加一个TAB字符
:$                  到文件的末行
:let end=line(".")  末行的行号 ==〉变量 END,函数line的功能是取得指定行的行号,
                    此处参数"."表示当前行
:1                  到文件的首行
"------------------------------------------
:let num=1          1 ==〉计数器
:while num<=end
    :let  line=getline(".")    取当前行的内容 ==〉变量 LINE
    :let  line=substitute(line,$,num,"")    在变量 LINE 的前面置入行号
    :call setline(".",line)    将变量 LINE 的内容写回当前行
    :+              下移一行
    :let  num=num+1 计数器加一
:endwhile           循环执行,直到文件结束
"------------------------------------------

文件处理

"有一文件,包含某外企的中国员工的资料,首先是姓名,然后是两个空格,其次是15位身份证号码。
将文件中每行出现的2个空格替换为10个空格
:%s/  /          /
保留行首的12个字符,将其余的空格删除,这样,前两个字段就对齐了
:%s/\(............\)\(  *\)/\1/
将文件中每行出现的雇员姓名互换,并将首字母大写
:%s/\([A-Za-z][A-Za-z]*\)\(\.\)\([A-Za-z][A-Za-z]*\)/\u\3\2\u\1/
在每一行的行尾添加2个空格和6个x
:%s/$/  xxxxxx/
将xxxxxx替换成出生年月日
:%s/\([0-9]\{6}\)\([0-9]\{6}\)\([0-9]\{3}\)  \(xxxxxx\)/\1\2\3  \2/
将年月日用/字符分隔,并在年前添加19
:%s/\(..\)\(..\)\(..\)$/19\1\/\2\/\3
:%s/$/  xxxxxx/
身份证号码末位是奇数的,将xxxxxx替换成male
:%s/\([0-9]\{14}[13579]\)\(.*\)\(xxxxxx\)/\1\2male  /
:%s/\([0-9]\{14}[02468]\)\(.*\)\(xxxxxx\)/\1\2female/
:$  到文件的最后一行
在文件的最末行插入一行 "-" 字符
:s/.*/&^M-----------------------------------------------
将所有的女员工记录移至文件尾
:g/female/.m$


将1234567890ABCDEF ,将其变成 13579ACE 24680BDF 的形式
"----------------------------------------------------
:s/.*/&^M/
:1
:map = malx+$p-`al=
"----------------------------------------------------


命令详解:
:s/.*/&^M/             在数据行下方添加一空行。
:1                     回到文件的首行的首字符。
:map = malx+$p-`al=    将一大串VIM命令映像给字符=
ma       将首字符标记为a
l        光标右移一个字符
x        删除光标处字符
+        移至下一行
$        到行尾
p        将删除的字符粘贴
-        回至上一行
`a       返回到标记字符处
=        递归调用,重复以上步骤,直到将该行所有的数据处理完







你可能感兴趣的:(Editors)