1、理解 1. vim的三种模式:编辑模式、输入模式、末行模式。输入模式与末行模式之间不可互相切换 2、按键说明 (移动) h或← 光标向左移动一个字符 j 或↓ 光标向下移动一个字符 k或 ↑ 光标向上移动一行 l或 → 光标向右移动一行 h,j,k,l 可以加数字表示移动n个字符,或n行 Ctrl+f 屏幕“向下”移动一页,相当于 [Page Down]按键 Ctrl + b 屏幕“向上”移动一页,相当于 [Page Up] 按键 Ctrl + d 屏幕“向下”移动半页 Ctrl+ u 屏幕“向上”移动半页 + 光标移动到非空白字符的下一行 - 光标移动到非空白字符的上一行 n+空格 按下数字后再按空白键,光标会向右移动这一行的 n 个字符 0 或 Home 移动到这一行的最前面字符处 $ 或 End 移动到这一行的最后面字符处 H 光标移动到这个屏幕的最上方那一行的第一个字符 M 光标移动到这个屏幕的中央那一行的第一个字符 G 移动到这个文件的最后一行 nG 移动到这个文件的第 n 行。例如20G 则会移动到这个文件的第 20行(可配合:set nu) n+Enter 光标向下移动 n 行 gg 光标移动到首行首字符 w 光标移动到下一个单词的词首 e 光标移动到下一个单词的词尾 b 光标移动到上一个单词的词首 ) 移动下一句 ( 移动上一句 } 移动下一句 { 移动上一句 ~ 转换大小写 J 删除当前行的换行符 U 撤销本行的所有操作 (搜寻与取代):支持正则表达式,和sed一样 /word 向光标之下寻找一个名称为 word 的字串。配合n使用 ?word 向光标之上寻找一个字串名称为 word 的字串配合N使用 :n1,n2s/word1/word2/g n1 与 n2 为数字。在第 1 与 n2 行之间寻找word1 这个字串,并将该字串取代为 word2 :1,$s/word1/word2/g 从第一列到最后一列寻找 word1 字串,并将该字串取代为 word2 !(常用) :1,$s/word1/word2/gc 第一列到最后一列找 word1字串,并将该字串取代为 word2,且提示是否取代 (删除、复制、粘贴) x, X 在一列字当中,x 为向后删除一个字符 , X 为向前删除一个字符 nx n为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, “10x” dd 删除光标所在的那一整行(常用) nd+方向键 删除光标后的n个字符 ndd n为数字。删除光标所在的向下 n 行,例如20dd 则是删除 20 行 (常用) y0 复制光标所在的那个字符到该行行首的所有数据 nyy n为数字。复制光标所在的向下 n 行,例如20yy 则是复制 20 行(常用) yy 复制光标所在的那一行(常用) y1G 复制光标所在行到第一行的所有数据 y$ 复制光标所在的那个字符到该行行尾的所有数据 p, P p为粘贴到光标上一行开始,P为粘贴到光标下一个字符开始 缓冲区若为整行,p则粘贴在光标所在的下方,否则粘贴到光标的后面 缓冲区若为整行,P则粘贴在光标所在的上方,否则粘贴到光标的上面 u 撤销一步 Ctrl+r 还原上一次撤销 . 重复上一个操作 cc 删除光标所在行字符后面的内容并开始进入输入模式 c$ 删除光标后面的所有字符,并进入输入模式 c^ 删除光标前面的所有字符到行首,并进入输入模式 c0 删除当前行内所有内容,并进入输入模式 ce cb cw NiSTRINT 输入粘贴N个STRING start command end command: gU # 大写 gU$ gu # 小写 y # 复制 d 删除 3、编辑模式模式切换到输入模式的可用按键(编辑模式) i, I i为光标所在字符的前面开始插入。大写I表示光标定位到当前光标所在行的行首并进入输入模式 a, A a为光标所在字符的后面开始插入。大学A表示光标定位到当前光标所在行的行首尾进入输入模式 o,O o为光标所在行的下一行新建一行。大写O为光标所在行上一行插入一行并开始输入 r,R 按下r后,输入新的字符替换光标所在处的一个字符。R则是可以一直替换光标往后的字符 3. 编辑模式模式切换到命令行界面的按键(末行模式) :w 将编辑的数据写入硬盘文件中 :w! 若文件属性为“只读”时,强制写入该文件。不过,到底能不能写入, 跟你对该文件的文件权限有关 ZZ 储存离开 :w [filename] 将编辑的数据储存成另一个文件 :r [filename] 将r后文件种的内容追加到当前文件光标后面 :set nu 显示行号,设置之后,会在每一列的字首显示该列的行号 :set nonu 与 set nu相反为取消行号 :n1,n2 w [filename] 将 n1 到 n2 行的内容储存成 filename 这个文件 :!COMD 执行命令 :r!COMD 读取命令的标准输出,写入当前文件 n,md 删除第n行到第m行 nd 删除指定的n行 4、vim 的暂存盘、救援回复与打开时的警告信息 1. 暂存盘 当我们正在使用vim编辑文件时,vim会在【被编辑的文件】所在的目录下主动创建 一个test.swp的暂存盘,vim的操作会 被记录到这个叫做暂存盘的文件当中。 2. 解决方案 有两种出现的问题可能:第一种是可能有两个用户同时编辑同一文件,会出现警告信息;第二种是vim意外终止后,会出现 警告信息。 3. 注意事项: 当恢复交换文件后,需要手动删除swp暂存盘,否则再次打开后还会出现警告信息。 5、vim其他功能 1.区块选择 v 字符选择,会将光标经过的地方反白选择 V 列选择,会将光标经过的列反白选择 [Ctrl]+v 区块选择,可以用长方形的方式选择数据 y 将反白的地方复制起来 d 将反白的地方删除掉 p 将刚刚复制的区块,在光标所在处贴上 可以进行区块选择,然后进行复制删除等操作。 2.多文件编辑 vim file1 file2 :n 编辑下一个文件 :N 编辑上一个文件 last 切换到最后一个文件 first 切换到第一个文件 :files 列出目前这个 vim 的打开的所有文件 3.多窗口功能 :sp 将vim窗口分为两个 Ctrl+w,s 水平拆分成连两个窗口 Ctrl+w,v 垂直拆分称两个窗口 :sp filename 在当前vim窗口打开另一个文件 Vim -o file file 同时打开多个文件,水平拆分 Vim -O file file 同时打开多个文件,垂直拆分 Ctrl+k 先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下方向键),则光标可移动到下方的窗口 :q 选中一个窗口,离开当前窗口 vim +N filename 打开文件光标调到第N行 vim +/PATTERN 打开文件调到第一个匹配到的行 vim -d filename1 filename2 同时打开比较两个文件 vim -m 只读方式打开文件 4.vim的补全、检查功能 先按[ctrl]+x再按[ctrl]+n 通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐 先按[ctrl]+x再按[ctrl]+f 以当前目录内的“文件名”作为关键字,予以补齐 先按[ctrl]+x再按[ctrl]+o 以扩展名作为语法补充,以 vim 内置的关键字,予以补齐 注意:要使用正确的扩展名 5.vim 环境设置与记录 1、vim操作记录,记录在root目录下.viminfo文件中 2、vim环境参数的命令 显示参数设置: help option-list :set nu :set nonu 就是设置与取消行号啊! :set hlsearch :set nohlsearch 设置搜寻的字符串是否反白显示,默认反白 :set autoindent :setnoautoindent 是否自动缩排 :set backup 是否自动储存备份文件?一般是 nobackup 的, 如果设置backup 的话,那么当你更动任何一个文件时,则原始文件会被另存成一个 文件filename~ 的文件。 举例来说,我们编辑hosts ,设置 :set backup , 那么当更动 hosts 时,在同目录下,就会产生 hosts~ 文件名的文件, 记录原始的 hosts 文件内容。 :set ruler 右下角状态说明 :set showmode 是否要显示 --INSERT-- 之类的字眼在左下角的状态 :setbackspace=0/1/2 我们按下 i 进入编辑模式,可以利用倒退键(backspace)来删除任意字符。 但是,某些 distribution 则不许如此。此时,我们就可以通过 backspace 来设置,当backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可 删除刚刚输入的字符,而无法删除原本就已经存在的文字。 :set all 显示目前所有的环境参数设置值。 :set 显示与系统默认值不同的设置参数, 一般来说就是你有自行变动过的设置参数 :syntax on :syntax off 如果开头是以 # 开始,那么该列就会变成蓝色 :set bg=dark :set bg=light 可用以显示不同的颜色色调,默认是“ light ”。如果你常常发现注解的字体深蓝 色实在很不容易看, 那么这里可以设置为 dark。 :set fileencoding 查看文件编码 :set showmatch 简写为set sm,括号成对匹配 注意:我们通常通过一般指令设置vim环境后,只是临时生效。可以通过/etc/vimrc进行配置。但不建议修改之,在root目录下创建.vimrc 文件,然后自行进行设置。在此文件中“注释。 6、vim常见问题 1. vim中文乱码问题 2. DOS与linux断行字符 DOS 使用的断行字符为 ^M$ ,我们称为CR 与 LF 两个符号。 在 Linux 下$ 这个断行符,我们称为LF。 因为在linux下指令开始执行是根据Enter为LF符号,所以dos下的文件,在linux下会出现的问题。 解决方案: 将格式转换称linux即可 下载转换工具: yum -y install dos2unix-* 命令: dos2unix Unix2dos 参数: -k 保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间) -n 保留原本的旧文件,将转换后的内容输出到新文件 示例: 将linux断行格式转换称dos格式:unix2dos -k man_db.conf 将 man_db.conf 转成 Linux 断行格式,旧文件,新文件放于 man_db.conf.linux:dos2unix -k -n man_db.conf man_db.conf.linux 查看文件断行格式:file filename 3. 语系编码转换 使用iconv指令转换 参数: --list 列出 iconv 支持的语系数据 -f from ,亦即来源之意,后接原本的编码格式 -t to ,亦即后来的新编码要是什么格式; -o file如果要保留原本的文件,那么使用 -o 新文件名,可以创建新编码文件。 示例:: 将big5编码转换称utf8并存为新文件:iconv -f big5 -t utf8 文件名 -o 文件名 7、进入 ex 模式 ex是vi的一个别名。 9、查询替代示例 1、将全文的xixi替换成haha :%s/xixi/haha/g # 分割符号/也可以是#、@等 %s/r..t/user:&/g # 将raat、tbbt等字符替换成user:root 10、查询替换格式 格式: [FLAGS]start_N,end_M[ACTION]/STRING1/STRING2/FLAGS start_N,end_M N # 第N行 N,M # 从第N行到第M行 N,+M # 从第N行到N行一下M行 $ # 表示最后一行 $-1 # 表示倒数第一行 # [start_N和end_M支持使用正则表达式匹配那个行] 例如:/^root/,/^ftp/d [ACTION] d # 删除 y # 复制 w # 将范围内的行另外保存到其他文件 s # 表示搜索替代 /STRING1/STRING2/ FLAGS(替换标志) c # 替换前询问 g # 全局,如果不加g,则只替换每行第一个匹配到的内容 i # 忽略大小写 11、处理示例 1、删除所有注释行 %s/^[[:space:]]*#/d 2、删除行尾多余空格 :%s/\s+$//g 3、删除空行 g/^$/d 4、删除以#开头的行 %g/^#/d 5、去掉行首所有空格 %s/^[[:space:]]*// 语法格式: [addr]s/源字符串/目的字符串/[option] 全局替换命令格式: %s/源字符串/目的字符串/g 12、vim打开二进制文件 vim -b binaryfile :%!xxd :%!xxd -r 13、vim寄存器 有26个命名寄存器和1 个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。寄存器名称从a-z之间。 3"ayy :表示复制3行到a寄存器中 "ap:表示将a寄存器中内容复制 默认使用是无名寄存器,还有10个数字寄存器: 0:最近复制的内容 1:存放最近删除的内容 14、vim中颜色显示 ^[[1;45;31mred^[[0m 15、vim转换文本格式 :set fileformat=unix