linux 下命令行模式打开 vim 的方式
vim FileName 打开文件 FileName,并将光标置于第一行首 vim +n FileName 打开文件 FileName,并将光标置于第 n 行首 vim + FileName 打开文件 FileName,并将光标置于最后一行 vim + /pattern File 打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符串处 vim –r FileName 在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复FileName vim File1 … Filen 打开多个文件,依次对之进行编辑 vim -o File1 … Filen 用水平分隔的方式打开多个文件然后进行编辑 vimdiff filename1 filename2 用垂直分割的方式打开两个文件 filename1,filename2 然后显示出两个文件的不同的比较
插入数据
基本操作
行操作:I 在光标所在行首插入文本 A 在光标所在行尾添加文本 o(open) 在光标所在行下面添加一行 O 在光标所在行上面添加一行 nS 从当前行开始,删除向下 n 行并进入编辑模式,若无 n 删除当前所在行,并进入编辑模式 :r filename 在编辑数据中读入一个文件内容数据,并把这些数据添加到光标所在行后面 字符操作:i(insert) 在光标前插入文本 a(append) 在光标后插入文本 r(Replace) 替换光标所在处字符,结束替换 R 替换多个字符,以按下 [Esc] 键标志替换结束 ns 从当前光标位置处开始,删除 n 个字符并进入编辑模式,若无 n 删除一个字符,并进入编辑模式
改变某区域:
可以重复的: [c]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ] c: 表示改变操作 重复操作次数: num 表示操作重复次数 操作区域选择: h 改变光标前一个字符 l 改变光标所在处的字符 j 改变本行与下一行 k 改变本行与上一行 w 改变光标开始到下一个单词词首处 b 改变光标开始到上一个单词词首处 e 改变光标开始到这个单词的结尾处 ( 改变光标开始到句子结束处 ) 改变光标开始到句子开始处 { 改变光标开始到段落开始处 } 改变光标开始到段落结束处 $ 改变从光标开始处到行尾处 G 改变从光标所在行到行尾处 /word 改变从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 ) ?word 改变从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 ) tc 改变从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 ) Tc 改变从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 ) fc 改变从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 ) Fc 改变从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 ) `c 改变从光标开始到标记 c 这个位置 不可重复的: [c]+[ 0 / ^ / H / L] c: 表示改变操作 操作区域选择: 0 改变从光标所在处到某一行的开始位置 ^ 改变到某一行的第一个字符位置(不包括空格或TAB字符) L 改变直到屏幕上最后一行的内容 H 改变直到屏幕上第一行的内容 [c]+[i]+[ { / } / ( / ) / " / ' ] c: 表示改变操作 i: 表示 in 即在里面的意思 操作区域选择: { 改变在 {} 中内容( 要求光标在 {} 内 ) } 改变在 {} 中内容( 要求光标在 {} 内 ) [ 改变在 [] 中内容( 要求光标在 [] 内 ) ] 改变在 [] 中内容( 要求光标在 [] 内 ) ( 改变在 () 中内容( 要求光标在 {} 内 ) ) 改变在 () 中内容( 要求光标在 () 内 ) " 改变在 "" 中内容( 要求光标在 "" 内 ) ' 改变在 '' 中内容( 要求光标在 '' 内
保存/退出
:q 退出 vim 返回到 shell,若有修改未被保存,vi 在末行给出提示信息并不退出 vim 到 shell :q! 退出 vim 返回到 shell,放弃未保存的修改 :wq 保存后退出,无论文件是否有修改,都更新文件的修改时间 :x 保存后退出,若文件没有修改的话,不更新文件的修改时间 :w 将编辑的数据写入硬盘中 :w! 若文件属性为"只读"时,强制写入该文件 :w filename 写入当前文件到 filename 文件 ZZ 若文件没有更动,则不保存离开,若文件被更动过,则保存后离开 :n1,n2 w filename 将 n1 到 n2 的内容保存到 filename 这个文件中
显示与取消行号,制表符,结尾标志位
:set nu 显示行号,设置之后,会在没一会的前缀显示该行的行号 :set nonu 与 :set nu 相反,为取消行号 :set list 显示制表符(^I)与行尾标志位($) :set nolist 与 :set list 相反,为取消显示制表符和结尾标志符
光标移动方法
位移
字符操作:nh / n← 向左移动 n 字符,无 n 移动一字符 nl / n→ 向右移动 n 字符,无 n 移动一字符 n<space> n 表示“数字”,光标会向右移动这一行 n 个字符. 0 这是数字 “0”:移动到这一行的最前面字符处 ^ 移动到这一行的最开始字符处 行操作:nj / n↓ 向下移动 n 行,无 n 移动一行 nk / n↑ 向上移动 n 行,无 n 移动一行 [Ctrl+p] 光标上移一行 [Ctrl+n] 光标下移一行 n+ 光标下移到 n 行头,若没有 n 光标移到下行行头 n- 光标上移到 n 行头,若没有 n 光标移到上行行头 n$ 光标下移到 n 行尾,若没有 n 则移动到本行行尾 n_ 向下移动 n-1 行,并光标移动到非空白行首 H 光标移动到这个屏幕的最上方哪一行 M 光标移动到这个屏幕的中央哪一行 L 光标移动到这个屏幕的最下方哪一行 nG n 为数字.移动到这个文件的第 n 行.若没有 n 则移动到最后一行 gg 移动到这个文件的第一行,相当于 1G n<Enter> 向下移动 n 行,无 n 移动一行
跳转
W / w 光标右移一个字至字首. B / b 光标左移一个字至字首. E / e 光标右移一个字至字尾. ( 光标移到上个句子句首. ) 光标移到下个句子句首. { 光标移到上个段落句首. } 光标移到下个段落句首. fc 光标跳转到本行下一个字符 c 处( c 指代任意字符 ) Fc 光标跳转到本行上一个字符 c 处( c 指代任意字符 ) tc 光标跳转到本行下一个字符 c 的前一个字符处( c 指代任意字符 ) Tc 光标跳转到本行上一个字符 c 的后一个字符处( c 指代任意字符 ) /word 光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 ) ?word 光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 ) # 光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示 * 光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示 gd 将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词 gD 将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词 `. 跳转至上次编辑位置 `c 将光标转移到书签 c 处( c 为任意字符 ) 下面两个与 / 与 ? 组合着用:n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个,但其实它只会在高亮字符中切换) N 上一个匹配(同上) 与 f/F 配合使用的命令:; 重复上一个f命令
复原与重做
. 重复前一个操作 u 复原前一个操作 [Ctrl]+r 重做上一个操作
屏幕滚动
[Ctrl+f] 屏幕“向下”移动一页,相当于[Page Down]按键 [Ctrl+b] 屏幕“向上”移动一页,相当于[Page Up]按键 [Ctrl+d] 屏幕“向下”移动半页 [Ctrl+u] 屏幕“向上”移动半页 [Ctrl+e] 屏幕向下滚一行 [Ctrl+y] 屏幕项上滚一行 nz 将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶 :$ 屏幕滚到文章最后一行 :0 屏幕滚到文章最开始一行
复制/删除/粘贴
总述
字符操作:nx 向后删除 n 个字符,若没有 n 向后删除一个字符 nX 向前删除 n 个字符,若没有 n 向前删除一个字符 d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 d$ 删除游标所在处,到该行的最后一个字符 y0 复制光标所在的那个字符到该行行首的所有数据 y$ 复制光标所在的那个字符到该行行尾的所有数据 p 将已复制的数据在光标下一列贴上 P 将已复制的数据在光标上一列贴上 行操作:ndd 删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列 dnG 删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一行的所有数据 nyy 复制光标所在的向下 n 行,若无 n 复制游标所在的那一行 ynG 复制游标所在列到第n行的所有数据,若无 n 复制游标所在行到最后一行的所有数据 J 将光标所在列与下一列的数据结合成同一列
删除某区域:
可以重复的: [d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ] d: 表示删除操作 重复操作次数: num 表示操作重复次数 操作区域选择: h 删除光标前一个字符 l 删除光标所在处的字符 j 删除本行与下一行 k 删除本行与上一行 w 删除光标开始到下一个单词词首处 b 删除光标开始到上一个单词词首处 e 删除光标开始到这个单词的结尾处 ( 删除光标开始到句子结束处 ) 删除光标开始到句子开始处 { 删除光标开始到段落开始处 } 删除光标开始到段落结束处 $ 删除从光标开始处到行尾处 G 删除从光标所在行到行尾处 /word 删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并可以使用 正则表达式 ) ?word 删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 ) tc 删除从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 ) Tc 删除从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 ) fc 删除从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 ) Fc 删除从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 ) `c 删除从光标开始到标记 c 这个位置 不可重复的: [d]+[ 0 / ^ / H / L / { / }[ / ]( / ) / " / '] d: 表示删除操作 操作区域选择: 0 删除从光标所在处到某一行的开始位置 ^ 删除到某一行的第一个字符位置(不包括空格或TAB字符) L 删除直到屏幕上最后一行的内容 H 删除直到屏幕上第一行的内容 [d]+[i]+[ { / }[ / ]( / ) / " / '] d: 表示删除操作 i: 表示 in 即在里面的意思 操作区域选择: { 删除在 {} 中内容( 要求光标在 {} 内 ) } 删除在 {} 中内容( 要求光标在 {} 内 ) [ 删除在 [] 中内容( 要求光标在 [] 内 ) ] 删除在 [] 中内容( 要求光标在 [] 内 ) ( 删除在 () 中内容( 要求光标在 {} 内 ) ) 删除在 () 中内容( 要求光标在 () 内 ) " 删除在 "" 中内容( 要求光标在 "" 内 ) ' 删除在 '' 中内容( 要求光标在 '' 内 )
复制某区域:
可以重复的: [y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ] y: 表示复制操作 重复操作次数: num 表示操作重复次数 操作区域选择: h 复制光标前一个字符 l 复制光标所在处的字符 j 复制本行与下一行 k 复制本行与上一行 w 复制光标开始到下一个单词词首处 b 复制光标开始到上一个单词词首处 e 复制光标开始到这个单词的结尾处 ( 复制光标开始到句子结束处 ) 复制光标开始到句子开始处 { 复制光标开始到段落开始处 } 复制光标开始到段落结束处 $ 复制从光标开始处到行尾处 G 复制从光标所在行到行尾处 /word 复制从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 ) ?word 复制从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 ) tc 复制从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 ) Tc 复制从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 ) fc 复制从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 ) Fc 复制从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 ) `c 复制从光标开始到标记 c 这个位置 不可重复的: [y]+[ 0 / ^ / H / L] y: 表示复制操作 操作区域选择: 0 复制从光标所在处到某一行的开始位置 ^ 复制到某一行的第一个字符位置(不包括空格或TAB字符) L 复制直到屏幕上最后一行的内容 H 复制直到屏幕上第一行的内容 [y]+[i]+[ { / } / ( / ) / " / ' ] y: 表示复制操作 i: 表示 in 即在里面的意思 操作区域选择: { 复制在 {} 中内容( 要求光标在 {} 内 ) } 复制在 {} 中内容( 要求光标在 {} 内 ) [ 复制在 [] 中内容( 要求光标在 [] 内 ) ] 复制在 [] 中内容( 要求光标在 [] 内 ) ( 复制在 () 中内容( 要求光标在 {} 内 ) ) 复制在 () 中内容( 要求光标在 () 内 ) " 复制在 "" 中内容( 要求光标在 "" 内 ) ' 复制在 '' 中内容( 要求光标在 '' 内
高亮显示
/word 将光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 ) ?word 将光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 ) gd 将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词 gD 将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词 # 光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示 * 光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示 :nohl 取消高亮显示
行移动操作
>> 将当前行右移一个单位 << 将当前行左移一个单位(一个tab符) == 自动缩进当前行
书签
mc 把当前位置记录为书签 c ( c 为任意字符 ) 当定义多个位置的标签为一样时,只有最后一个定义的位置标签会生效 `c 将光标转移到书签 c 处( c 为任意字符 )
十六进制查看文本类容
:%!xxd 按十六进制查看当前文件 :%!xxd -r 从十六进制返回正常模式
自动补全
[Ctrl+n] 自动补全(前提是以前打过的单词) [Ctrl+p] 自动补全(前提是以前打过的单词)
标记文本
进入标记文本模式v 进入标记文本模式,单字符模式 V 进入标记文本模式,行模式 [ctrl+v] 进入标记文本模式,列模式,类似于UE的列模式 对标记文本模式中区域选择aw 选中一个单词,含单词后的空格 as 选中一个句子,含句号后的空格 ap 选中一个段落,含段落后的空格 ab 选中()括号中的所有内容,含() aB 选中{}括号中的所有内容,含{} iw 选中一个单词,不含单词后的空格 is 选中一个句子,不含句号后的空格 ip 选中一个段落,不含段落后的空格 ib 选中()括号中的内容,不含() iB 选中{}括号中的内容,不含{} 除此之外还有上面光标移动的方法,但是要除去组合键,如:[ctrl]+[p]移动标记文本模式中光标位置o 光标在选择区域中的对角线之间的跳转 O 光标在选择区域中的横纵之间的跳转 当在 V 与 [ctrl]+[v] 模式中我们除了 o,O 来移动光标位置外,还可以通过移动光标位置中一些方法来移动光标位置(不是所有而是其中一些) 对标记文本模式中数据操作~ 将选中块中的内容大小写翻转 u 将选中块中的内容转成小写 U 将选中块中的内容转成大写 y 复制选中块中的内容 d/D/x/X 删除选中块中的内容
窗口操作
:vne [filename] 打开文件 filename,并把光标所在窗口沿横向分为两个窗口 :sp [filename] 打开文件 filename,并把光标所在窗口沿纵向分为两个窗口 :S [filename] 打开文件 filename,并把光标所在窗口沿纵向分为两个窗口 :new [filename] 打开文件 filename,并把光标所在窗口沿纵向分为两个窗口 ************************************************************ 在 new 前面可以加的参数: leftabove 当前窗口的左上方 aboveleft 同上 rightbelow 当前窗口的右下方 belowright 同上 topleft 整个 Vim 窗口的最上面或者最左边 botright 整个 Vim 窗口的最下面或者最右边 ************************************************************ :only 关闭除了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作将失败 :close 关闭编辑窗口,如果编辑窗口文本修改过且未保存,或编辑窗口为唯一窗口的话,操作失败 :vertical diffsplit [file] 纵向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同 :diffsplit [file] 横向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同 :res -n 窗口高度减小n :res +n 窗口高度增大n [ctrl+w]+[=] 窗口等宽 [ctrl+w]+[h] 将光标移动到左方的窗口 [ctrl+w]+[←] 将光标移动到左方的窗口 [ctrl+w]+[l] 将光标移动到右方的窗口 [ctrl+w]+[→] 将光标移动到右方的窗口 [ctrl+w]+[j] 将光标移动到下方的窗口 [ctrl+w]+[↓] 将光标移动到下方的窗口 [ctrl+w]+[k] 将光标移动到上方的窗口 [ctrl+w]+[↑] 将光标移动到上方的窗口 [ctrl+w]+[t] 将光标移动到最上方的窗口 [ctrl+w]+[b] 将光标移动到最下方的窗口 [ctrl+w]+[ctrl+r] 将光标所在窗口下移 [ctrl+w]+[q] 退出光标所在窗口,相当于在光标所在窗口的命令行模式中输入:q [ctrl+w]+[+] 扩大所在窗口 [ctrl+w]+[-] 缩小所在窗口 对所有窗口执行命令:qall 退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的 :wall 保存所有修改过的窗口 :wqall 保存所有修改过的窗口并关闭,然后退出 vim :qall! 强制退出所有窗口,然后退出 vim
多档案编辑
:n 编辑下一个档案 :N 编辑上一个档案 :files 列出目前这个 vim 的开启的所有档案
执行 shell 命令
:sh 打开 shell,可执行shell命令,输入exit退出shell返回到vim :!cmd 直接执行 shell ( cmd 表示为任意 shell 命令 )
命令行下行操作
:n1,n2 co n3 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『 ,n2』则复制 n1 到 n3 行下 :n1,n2 m m3 移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『 ,n2』则将 n1 内容移到 n3 行下 :n1,n2 d 删除 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行删除 :n1,n2 y 复制 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行复制 :[range]s/{pattern}/{string}/[flag] [count] 字符替换 ************************************************************ 格式说明: range 表示行数 % 表示所有行 n1,n2 表示由 n1 行到 n2 行之间,若无 n2 则表示在 n1 行处 s 表示substitution,替换的意思 pattern 表示被替换的字符串 string 表示替换的字符串 flag 表示标志,取值g,i,c等 g 表示global,全部 i 表示ignore,忽略大小写 c 表示confirm,一个一个交互确认替换 count 表示从当前行到接下来的第几行,表示范围 **************************************************************