vim编辑器简介
文本编辑器:文本,纯文本信息,ASCII test,不能有颜色等修饰符;Unicode全球通用
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi(visual interface)vim(vi improved)
vim:模式化的编辑器
基本常用模式:
命令模式(Command mode),插入模式(Insert mode)和末行模式(Last line mode)
命令模式:此模式光标可以移动,按某个键后会转入输入模式
插入模式:可以输入字符改变内容
末行模式:此模式可以在最后一行输入命令来执行操作
打开文件乱码
编辑~/.vimrc文件,加上如下几行: set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf-8 set encoding=utf-8 即可搞定。
打开文件:
如果路径没有此文件,则会创建该文件 # vim [option] [file..] +#:打开文件后,直接让光标处于#行的行首 +/pattern:打开文件后,直接让光标处于第一个被pattern匹配到的行首 # vim + 打开到最后一行
关闭文件:
末行模式 q:退出 q!:强制退出,不保存此前的编辑 wq:保存修改并退出 x:保存并退出 w /path:保存当前文件到某个目录文件 命令模式 ZZ:保存并退出 ZQ:不保存退出
模式转换:
命令模式->插入模式: i: insert 在光标所在处前面输入 a: append 在光标处后方输入 I: 在光标所在的行首插入 A: 在光标所在的行尾输入 o: 在光标所在处下方打开的一个新行 O: 在光标所在处的上方打开一个新行 插入模式->命令模式:esc 命令模式->末行模式:: 末行模式->命令模式:esc
命令模式,光标跳转:
字符间跳转: h:左 l:右 k:上 j:下 单词间跳转: w:下一个单词的词首 b:当前或者前一个单词的词首 e:当前或者后一个单词的词尾 #COMMAND:跳转由#指定的个数的单词 a. 5e:当前光标跳转到第5个单词的词尾 行首行尾跳转: ^:跳转至该行行首的第一个非空白字符 0:跳转至该行行首 $:跳转至该行行尾 行间跳转: #G:跳转至#行 1G,gg:第一行 G:最后一行 句间跳转: (:上一句 ):下一句 段间跳转: {:上一段 }:下一段 翻屏,命令模式: ctrl+f:文件尾部翻一屏 ctrl+b:文件首部翻一屏 ctrl+d:文件尾部翻半屏 ctrl+u:文件首部翻半屏
编辑,命令模式:
字母编辑: x:删除光标所在处的字符 #x:删除光标所在处起始的#个字符 xp:交换光标所在处的字符与其后面的字符的位置 替换命令(replace) r:替换光标所在处的字符为CHAR字符 rCHAR 删除命令: d:删除命令,可结合光标跳转字符,实现范围删除,并将删除的内容放到剪切板中 d$:当前光标所在处到行尾删除 d^:行首的第一个非空白字符到当前光标处删除 dw:当前光标处到下一个单词的词首删除 de:光标在单词中间,光标处到当前单词词尾删除 db:光标在单词中间,当前单词词首到光标处删除 dd:删除光标所在处的行 #dd:删除光标所处的行(算此行)起始的共#行,也可以当做剪切,命令之后可以粘贴到其他地方 复制命令(yank,y) y:复制,工作行为相似于d命令 y$:当前光标所在处到行尾复制 y^:行首的第一个非空白字符到当前光标处复制 y0:行首的第一个字符到当前光标处复制 ye:光标在单词中间,光标处到当前单词词尾复制 yw:当前光标处到下一个单词的词首复制 yb:光标在单词中间,当前单词词首到光标处复制 yy:复制一整行 #yy:删除光标所处的行(算此行)起始的共#行 粘贴命令(p,put,paster) p:小p,缓冲区中的内容如果是整行,则粘贴在当前光标所在行的下方,否则,粘贴至当前光标所在处的后方 P:大p,缓冲区中的内容如果是整行,则粘贴在当前光标所在行的上方,否则,粘贴至当前光标所在处的前方 可视化模式 1. v:按字符选定 2. V:按行选定 3. 结合编辑命令使用:d,c,y 撤销命令(undo) 1. u:撤销此前的操作 2. #u:撤销此前的n个操作 撤销此前的撤销 1. ctrl+r 《vim自带的练习教程》
vim的末行模式:
地址定界:start_pos[,end_pos] #:特定的第#行,例如5即第5行 .:当前行 $:最后一行 #,#:指定行范围,左起为起始行,右侧为结束行 #,+#:指定行范围,左侧为起始行的绝对编号,右侧为相对左侧行号的偏移量,例如:3,+7 %:全文 /pattern/:从光标所在处起始,向文件尾部,第一次被模式所匹配到的行, :/first/,$d 从第一次被first匹配到的行到最后一行,所有行删除 /pattern1/,/pattern2/: 可同编辑命令一同使用,实现编辑命令: 1. d,y,c 2. w/PATH/TO/SOMEFILE:将范围内的行保存到,,, 3. r/PATH/FROM/SOMEFILE:将指定文件中的文本读取并插入到指定位置 a. 5r/root/eh 插入到第5行后面 查找 /PATTERN:从当前光标所在处向文件尾部查找 ?PATTERN:从当前光标所在处向文件首部查找 n:下一个,与命令同方向 N:上一个,与命令反方向
查找替换
s:末行模式的命令,使用格式:s/要查找的内容/替换为的内容/修饰符 要查找的内容:可使用正则表达式 替换为内容:不能使用正则表达式,但是可以引用, :%s@\<t\([[:alpha:]]\+\)\>@T\1@g 将所有单词首字母为t的单词首字母替换成T, 如果“要查找的内容”部分在模式中使用分组符号,在“替换的内容”可以引用,\1,\2... 直接引用查找模式匹配到的全部文字,可以用&符号 :%s@\<T[[:alpha:]]\+\>@&er@g 将以T开头的单词后面都添加er 修饰符: i:查找时忽略大小写,都可以匹配到 g:全局替换,意味着一行如果匹配到多次,均替换 可把分隔符替换为其他非常用的字符 常用###或者@@@ :%s@/etc/passwd@/var/log@g 这种也可以,分隔符可以换成其他字符代替 示例: :%s/this/This 在全文中全局搜索this替换成This ,每行只会替换第一次出现的,第二次出现this不会替换 :%s/this/This/g 在全文中全局搜索this替换成This ,所有的this都会执行 :%s/\/etc\/passwd/\/var\/log/g 全文替换将/etc/passwd替换为/var/log,这里的/要转译,这样才能匹配到 :%s@\<t\([[:alpha:]]\+\)\>@T\1@g 将所有单词首字母为t的单词首字母替换成T, :%s/^#//g 将行首有#的,将#删除 复制/etc/grub2.cfg文件复制到/tmp/目录下面,用查找替换命令删除/tmp/grub1.cfg文件中以空白字符开头的行的行首的空白字符 :%s@^\([[:space:]]\+\)@@g 复制/etc/rc.d/init.d/functions文件至/tmp目录下,用查找替换命令/tmp/functions文件的每个以空白字符开头的行的行首加上# :%s@^[[:space:]]@#&@g 为/tmp/grub2.cfg文件的前三行的行首添加#号 :1,3s@^@#&@g 地址定界,将前面的全局定界%替换为具体的范围, 将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enable=1,所有gpgcheck=0替换为gpgcheck=1 :%s@\(enabled\|gpgcheck\)=0@\1=1@g 将文本中的有空格的地方换行,都单独放一行 :%s@[[:space:]]@\r@g
多文件分屏显示
分屏启动Vim 使用大写的O参数来垂直分屏 vim -On file1 file2 .. 使用小写的o参数来水平分屏 vim -on file1 file2 ... 注释: n是数字,表示分成几个屏 关闭分屏 关闭当前窗口 Ctrl+W c,按ctrl+w,然后按c键 关闭当前窗口,如果只剩最后一个了,则退出Vim Ctrl+W q,按ctrl+w,然后按q键 分屏 上下分割当前打开的文件。 Ctrl+W s 上下分割,并打开一个新的文件。 :sp filename 左右分割当前打开的文件。 Ctrl+W v 左右分割,并打开一个新的文件。 :vsp filename Vi中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+W 把光标移到右边的屏。 Ctrl+W l 把光标移到左边的屏中。 Ctrl+W h 把光标移到上边的屏中。 Ctrl+W k 把光标移到下边的屏中。 Ctrl+W j 把光标移到下一个的屏中。. Ctrl+W w
定制vim工作特性
永久有效 全局:/etc/vimrc 用户:~/.vimrc 行号 显示:set number, 简写为set nu ,并不会保存到文件中 取消显示:set nonumber, 简写为set nonu 括号匹配高亮 显示:set showmatch, 简写为set sm ,并不会保存到文件中 取消显示:set noshowmatch, 简写为set nosm 光标到括号时,对应的括号就自动高亮(好像已经默认有,无法改变) 自动缩进 启用:set ai, 简写为set ai ,并不会保存到文件中 取消:set noai, 简写为set noai 高亮搜索结果 搜索完后显示高亮,再次打开文件,搜索结果还是高亮 启用:set hlsearch, 简写为 ,并不会保存到文件中 取消:set nohlsearch, 简写为 语法高亮 启用:syntax on 取消:syntax off 忽略字符大小写 启用:set ic 取消:set noic 显示所有的内容,包括没有显示的回车符,空格等 启动:set list 取消:set nolist 获取帮助,在末行模式: :help :help option-list :set :set all 当编辑的文件以非正常方式退出时,(比如网络中断,或者终端断开),下次再打开该文件,会提示 i. [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort: 同时,该目录下面会生成 .file.swp 同名文件,保存的是之后退出时的文件,E:表示放弃更改,打开编辑前的文件,但是下次打开还会提示。 R:覆盖原文件,继续,编辑,删除临时文件就不会 函数操作 注释3-9行: 3,9s@^@#@ 取消3-9行: 3,9s@^#@@
vim中调用shell命令
:!command:不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容 :r !command:将shell命令command的结果插入到当前行的下一行 :r !date:读取系统时间并插入到当前行的下一行。
块操作,注释
注释某连续几行代码 ^ → 到行头 <C-v> → 开始块操作 <C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的) I-- [ESC] → I是插入,插入“##”,按ESC键来为每一行生效。 删除两个引号之间的内容,将光标放到引号中间,任意位置,然后敲:di",即可删除
实用例子
整体缩进 v 进入选择模式 j 一直选择到想要的地方 < 将这个块左移 > 将这个块右移 整体缩进 或者在命令行 :10,100> 第10行至第100行缩进 :20,80< 第20行至第80行反缩进 整体缩进 crt+v 进入块编辑 j 选择块 I 插入模式 space 向右移 esc 整个块会向右移,但是左移无效 块注释 crt+v 进入块编辑 j 选择块 I 插入模式 # 注释 esc 整个块会注释 块取消注释 块注释 crt+v 进入块编辑 j 选择块 d 删除注释
文档:vim简明教程
–
–
–
评论前必须登录!
注册