vim
vim编辑器 文本编辑器: 文本:纯文字,ASCII text;UNIcode; 文本编辑种类: 行编辑器:sed 全屏编辑器:nano ,vi vi: visual interface vim: vi improved vim: 模式化的编辑器 基本模式: 编辑模式,命令模式 输入模式 某行模式: 内置的命令行接口; 打开文件: # vim [选项] [文件] # vim +5 [文件] 光标跳到第五行行首 # vim +/exp [文件] 光标定位匹配到exp字符处的行首 模式转换: 编辑模式:默认模式 编辑模式-->输出模式: i: insert在光标所在处 前面输入; a: append在光标所在处 后面输入; I: 在当前光标所在行的 行首输入; A: 在当前光标所在行的 行尾输入; o: open在当前光标所在行的 下方打开一个新行; O: 在当前光标所在行的 上方打开一个新行; 输入模式 --> 编辑模式 按下ESC键 编辑模式 --> 末行模式 : 末行模式 --> 编辑模式 ESC 关闭文件: ZZ: 保存并退出,编辑模式下的保存退出; :q 退出 :q! 强制退出,丢弃做出的修改 :wq 保存并退出 :x 保存并退出 :w /path/to/somewhere 另存为另外一个文件,该文件可为已存在文件,亦可为不存在文件 光标跳转: 字符间跳转 k: 向上跳转 j: 向下跳转 h: 向左跳转 l: 向右跳转 #COMMAND 跳转由#指定的个数的字符, 敲完数字,敲命令kjhl,即跳转#个字符 单词间跳转 w: 下一个单词的词首 b: 当前或前一个单词的词首 e: 当前或下一个单词的词尾 #COMMAND 由#指定一个跳转的单词数 即跳转#个单词 行首行尾跳转 ^: 跳转至行首的第一个非空白字符 0: 跳转至行首 $: 跳转到行尾 行间跳转 #G: 跳转至由#指定行 跳转至第#行 G: 跳转至最后一行 1G或gg: 跳转至第一行 句间移动 ): 跳转至下一句 (: 跳转至上一句 段落间移动 }: 跳转至下一段 {: 跳转至上一段 翻屏: ctrl+f: 向文件尾部翻一屏 ctrl+b: 向文件首部翻一屏 ctrl+d: ...半屏 ctrl+u: ...半屏 enter:按行向后翻 vim的编辑命令 字符编辑: x x: 删除光标处的字符; #x: 删除光标处起始的#个字符; xp: 交换光标所在处的字符及其后面字符的位置; 替换命令(r replace) r: 替换光标所在处的字符; rCHAR 删除命令: d d: 删除命令,可结合光标跳转字符使用,实现范围删除 d$: 删除光标处到行尾的字符 d^: 删除光标处到非空白处行首的字符(无空白) d0: 删除光标处到行首的字符(有空白) dw: 删除光标处到下一个单词词首的字符 de: 删除光标处到当前或者下一个单词词尾的字符 db: 删除光标处到当前或前一个单词的词首的字符 #command 删除#个字符 dd 删除光标所在处的行 #dd 删除多行 粘贴命令(p, put, paste): p: 缓冲区中存储的如果为整行,则粘贴至当前光标所在行的下方,否则,则粘贴至当前光标所在处的后面 P: 缓存区中存储的如果为整行,则粘贴至当前光标所在行的上方,否则,则粘贴至当前光标所在处的前面 复制命令(y,yank): y: 复制,工作行为相似于d命令 y$ y^ y0 yw ye yb #COMMAND 复制#个字符 yy 复制光标所在处的行 #yy 复制多行,从光标这行开始为第一行复制 改变命令(c,change): c: 修改 编辑模式 --> 输入模式 工作行为相似于d命令 c$ c^ c0 cw ce cb #command : 修改#个字符 cc: 删除行并输入新内容 #cc: 删除#行并输入新内容 其他编辑操作: 可视化模式: v: 按字符选定 V: 按行选定 注意:经常结合编辑命令使用 d c y 撤销此前的编辑: u: (undo) 撤销此前的操作 #u: 撤销#次的操作 默认是撤销50次 撤销此前的撤销: ctrl+r 重复执行前一个编辑操作: . .(点号) vim自带的练习教程: vimtutor LANG='zh_CN.UTF-8' //切换中文 vim的末行模式: 內建的命令行接口 (1)地址定界 :start_pos[,end_pos] # 具体第#行,例如2 表示第2行; #,# 指定行范围,左侧#表示起始行,到右侧#表示结束行; #,+# 左侧#表示的行起始,加上右侧#表示的行数即偏移量;如: 3,+7 . 当前行; $ 最后一行; 如: .,$-1 表示当前行到倒数第二行 % 全文,相当于1,$ /pattern/: 从光标所在处起始向文件尾部第一次被模式所匹配到的行; /first/,$ /pat1/,/pat2/ : 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束; #,/pat/ : 从第#行开始到第一次被pat匹配到的行结束; /pat/,$ : 从第一次被pat匹配到的行开始到文本的最后一行结束; 可同编辑器命令一同使用,实现编辑操作; d y c w /path/to/somefile: 将范围内的文本保存至指定的文件中; r /path/from/somefile: 将指定的文件中的文本读取并插入至指定位置; 注意:亦可使用正则表达式查找字符串 (2)查找 /pattern: 从当前光标所在处向文件尾部查找能够被当前模式匹配的所有字符串; ?pattern: 从当前光标所在处向文件首部查找能够被当前模式匹配的所有字符串; n:下一个,与命令方向相同; N:上一个,与命令方向相反; (3)查找并替换 末行模式的命令 使用格式: s/要查找的内容/替换为的内容/修饰符 要查找的内容:可使用基本正则表达式; 替换为的内容:不能使用下则表达式,但可以引用; 如果"要查找的内容"部分在模式中使用分组符号;在"替换为的内容"中使用后向引用; 直接引用查找模式匹配到的全部文本,须使用&符号; 修饰符: i 忽略大小写 g 全局替换,默认情况下,每一行只替换第一次出现的内容 s///也可使用其他分隔符: s@@@ s### 例如: :%s@/var/log@/etc/fstab@g :%s@\<t\([[:alpha:]]\+\)\>@T\1@g :%s@\<t[[:alpha:]]\+\>@&er@g :%s@^#@@g //相当于删除 练习: 1.复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符 cp /etc/grub2.cfg /tmp/ :%s@^[[:space:]]\+@@g 2.复制/etc/rc.d/init.d/functions文件至/tmp/目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号 cp /etc/rc.d/init.d/functions /tmp/ :%s@^[[:space:]]\+[^[:space:]]@#&@g 3.为/tmp/grub2.cfg文件的前三行的行首加上#号 :1,3s@^@#&@g 4.将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1; :%s@\(enabled\|gpgcheck\)=0@\1=1@g 或者:%s@\<enabled=1\>@enabled=0@g和:%s@\<gpgcheck=1\>@gpgcheck=0@g vim多文件模式: vim FILE1 FILE2 FILE3... :next 下一个 :perv 上一个 :first 第一个 :last 最后一个 退出所有文件: :wall 保存所有 :qall 退出所有 :wqall 保存并退出所有 窗口分割模式: vim -o|-O file1 file2... -o 水平分割 -O 垂直分割 在窗口间切换 ctrl+w,arrow(箭头方向键) 单文件窗口分割: ctrl+w,s split 水平分割 ctrl+w,v vertical 垂直分割 定制vim的工作特性: 末行模式 当前vim进程有效 配置文件 永久有效 全局 /etc/vimrc 个人 ~/.vimrc 需要手动创建 1、行号 显示 set number 简写为 set nu 取消显示 set nonumber 简写为 set nonu 2、自动缩进 启用 set ai 禁用 set noai 3、高亮搜索 启用 set hlsearch 禁用 set nohlsearch 4、语法高亮 启用 syntax on 禁用 syntax off 5、忽略字符的大小写 启用 set ic 禁用 set noic 获取帮助 :help :help subject 练习 1.复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log; :%s@/etc/sysconfig/init@/var/log@g 2.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号; :%s@^#\([[:space:]]\)\+@\1@g 3.如何设置tab键输进4个字符(默认8个); vim /etc/vimrc //全局生效 set ts=4 set sw=4