vim基本操作 *
- 贡献者:HHJ
- 阅读:767
- 类别:脚本工具
- 更新时间:2018-01-03 08:44:10
跳转
gg|G 移到文件 第一行|最后一行 起始位置 NG|Ngg|:n 将光标定位到第 N 行的起始位置 [n]H|M|L 移到屏幕第一行|中间行|最后一行 ctrl+f|b 前|后 翻一页,相当 page down|up {|(|)|} 移动到 前|后 段|句 的开始 0|^|g_|$ 移到 行首|行首字符|行尾字符|行尾 w|e|b 移到下一个字的 开头|末尾|前字开头 #|* 搜索当前单词,跳转 上一处|下一处 [n] fa|ta 到本行下一[n]个a处|a前字符 F|T 和f和t一样,只不过是相反方向
查改删替
【词义】 s = substitute 代替 r = replace 替换 c = cover 覆盖 d = delete 删除 /|?str 正|反 向搜索str n|N 正|反 向继续搜索 [n]rc 用 c 替换光标右侧的n个字符 [n]x 删除光标右侧的n个字符 [n]dd 删除(剪切) n 行内容,并去除空隙 [n]dw|b 删除光标 右|左 侧的 n 个字 d$|0 删除到行 尾|首的字符, D=d$ J 删除本行回车符 d)|} 删除到 下一句|下一段 的开始 d回车 删除2行 [n]s 用输入的正文替换光标右侧 n 个字符 [n]S 删除当前行在内的n行,并进入编辑模式 [n]cw 用输入的正文替换光标右侧的 n 个字 [n]cb 用输入的正文替换光标左侧的 n 个字 c$=cW 用输入的正文替换至本行末尾的所有字符 c0 用输入的正文替换行首至光标的所有字符 u 撤销上一步的操作 Ctrl+r 恢复上一步被撤销的操作
复制
p|P 将缓冲区的内容粘贴到光标的 后|前 面 u|. 撤消前一条命令 | 重复前一条命令 [n]yy 复制 n 行内容到内存缓冲区 "+[n]yy 复制 n 行到操作系统的粘贴板 i|a|o 在光标 左侧|右侧|下一行 插入内容 I|A|O 在行首|行尾|上一行 插入内容 ctrl+[ 退出插入模式,相当于Esc
命令行模式
:e|w|q [f] 打开|(保存|另存)|退出 文档, f=filename :recover 恢复文件 :r|e|f [f] 读取|编辑|(重命名|打印) 文档[状态] :[n|m,n]w file 写入文件 :/str/ 正向搜索,将光标移到下一个包含str的行 :?str? 反向搜索,将光标移到上一个包含str的行 :/str/w file 正向搜索,将包含str的行写入file文件 :/s1/,/s2/w f 正向搜索,将s1至s2的行写入文件 :[$|m,n] s/A/B/[g] 字符串替换 :g/A/s//B/g 全文字符串替换 :[n|m,n]d 删除指定行 :g/^\(.*\)$\n\1$/d 删除连续相同行,保留最后一行 :/A/,/B/d 删除从字符串A到B的所有行 :5,20s/^#//g 删除5到20行开头的#注释 :%s/A/&/gn 统计A次数 :g/^\s*$\n\s*$/d 删除连续多个空行,只保留一行空行
窗口操作
:[vertical] res(ize) [+|-][n] 设定|增加|减少 n行的高度|n列的宽度 [n]Ctrl-w +|-|<|> 增加|减少 n行的高度|n列的宽度 Ctrl-w = 窗口等宽或等高 Ctrl-w | 设置当前窗口的宽度为 N (默认值为最大可能宽度)。
设置
autoindent 设置正文自动缩进 ruler 设置在屏底显示光标行列位置 ignorecase 忽略规则表达式中大小写 tabstop=4 设置Tab键跳过的空格数 number 设置显示正文行号 mk 将选项保存在当前目录的 .exrc 文件中
vi / vim 删除以及其它命令___尚未整理
删除当前字符:x ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。 x 或 X 删除一个字符。 Ctrl+u 删除输入方式下所输入的文本。 V 选择一行 ^V 按下^V后即可进行矩形的选择了 aw 选择单词 iw 内部单词(无空格) as 选择句子 is 选择句子(无空格) ap 选择段落 ip 选择段落(无空格) D 删除到行尾 x,y 删除与复制包含高亮区 dl 删除当前字符(与x命令功能相同) d0 删除到某一行的开始位置 d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符) dw 删除到某个单词的结尾位置 d3w 删除到第三个单词的结尾位置 db 删除到某个单词的开始位置 dW 删除到某个以空格作为分隔符的单词的结尾位置 dB 删除到某个以空格作为分隔符的单词的开始位置 d7B 删除到前面7个以空格作为分隔符的单词的开始位置 d) 删除到某个语句的结尾位置 d4) 删除到第四个语句的结尾位置 d( 删除到某个语句的开始位置 d) 删除到某个段落的结尾位置 d{ 删除到某个段落的开始位置 d7{ 删除到当前段落起始位置之前的第7个段落位置 dd 删除当前行 d/text 删除从文本中出现“text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容 dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容 dtc 删除当前行直到下一个字符“c”所出现位置之间的内容 D 删除到某一行的结尾 d$ 删除到某一行的结尾 5dd 删除从当前行所开始的5行内容 dL 删除直到屏幕上最后一行的内容 dH 删除直到屏幕上第一行的内容 dG 删除直到工作缓存区结尾的内容 d1G 删除直到工作缓存区开始的内容 在Vi 中移动光标 k 上 h l 左 右 j 下 ^ 移动到该行第一个非空格的字符处 w 向前移动一个单词,将符号或标点当作单词处理 W 向前移动一个单词,不把符号或标点当作单词处理 b 向后移动一个单词,把符号或标点当作单词处理 B 向后移动一个单词,不把符号或标点当作单词处理 ( 光标移至句首 ) 光标移至句尾 { 光标移至段落开头 } 光标移至段落结尾 H 光标移至屏幕顶行 M 光标移至屏幕中间行 L 光标移至屏幕最后行 0 到行首 $ 到行尾 gg 到页首 G 到页末 行号+G 跳转到指定行 n+ 光标下移n行 n- 光标上移n行 Ctrl+g 查询当前行信息和当前文件信息 fx 向右跳到本行字符x处(x可以是任何字符) Fx 向左跳到本行字符x处(x可以是任何字符) tx 和fx相同,区别是跳到字符x前 Tx 和Fx相同,区别是跳到字符x后 C-b 向上滚动一屏 C-f 向下滚动一屏 C-u 向上滚动半屏 C-d 向下滚动半屏 C-y 向上滚动一行 C-e 向下滚动一行 nz 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。 进入和退出Vi命令 vi filename 打开或新建文件,并将光标置于第一行首 vi +n filename 打开文件,并将光标置于第n行首 vi + filename 打开文件,并将光标置于最后一行首 vi +/pattern filename 打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename 在上次正用vi编辑时发生系统崩溃,恢复filename vi filename ... filename 打开多个文件,依次进行编辑 ZZ 退出vi并保存 :q! 退出vi,不保存 :wq 退出vi并保存 重复操作 . 重复上一次操作 自动补齐 C-n 匹配下一个关键字 C-p 匹配上一个关键字 插入 o 在光标下方新开一行并将光标置于新行行首,进入插入模式。 O 同上,在光标上方。 a 在光标之后进入插入模式。 A 同上,在光标之前。 R 进入替换模式,直到按下Esc set xxx 设置XXX选项。 行合并 J 把下面一行合并到本行后面 Vi中查找及替换命令 /pattern 从光标开始处向文件尾搜索pattern ?pattern 从光标开始处向文件首搜索pattern n 在同一方向重复上一次搜索命令 N 在反方向上重复上一次搜索命令 % 查找配对的括号 :s/p1/p2/g 将当前行中所有p1均用p2替代,若要每个替换都向用户询问则应该用gc选项 :n1,n2s/p1/p2/g 将第n1至n2行中所有p1均用p2替代 :g/p1/s//p2/g 将文件中所有p1均用p2替换 .*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"\" 查找的一些选项 设置高亮 :set hlsearch 设置高亮 :set nohlsearch 关闭高亮 :nohlsearch 关闭当前已经设置的高亮 增量查找 :set incsearch 设置增量查找 :set noincsearch 关闭增量查找 在Vi中删除 x 删除当前光标下的字符 dw 删除光标之后的单词剩余部分。 d$ 删除光标之后的该行剩余部分。 dd 删除当前行。 c 功能和d相同,区别在于完成删除操作后进入INSERT MODE cc 也是删除当前行,然后进入INSERT MODE 更改字符 rx 将当前光标下的字符更改为x(x为任意字符) ~ 更改当前光标下的字符的大小写 键盘宏操作 qcharacter 开始录制宏,character为a到z的任意字符 q 终止录制宏 @character 调用先前录制的宏 恢复误操作 u 撤销最后执行的命令 U 修正之前对该行的操作 Ctrl+R Redo 在Vi中操作Frame c-w c-n 增加frame c-w c-c 减少frame c-w c-w 切换frame c-w c-r 交换两个frame VIM中的块操作 Vim支持多达26个剪贴板 选块 先用v,C-v,V选择一块,然后用y复制,再用p粘贴。 yy 复制当前整行 nyy 复制当前行开始的n行内容 ?nyy 将光标当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 ?nyw 将光标当前行及其下n个词保存到寄存器?中,其中?为一个字母,n为一个数字 ?nyl 将光标当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 ?p 将寄存器?中的内容粘贴到光标位置之后。如果?是用yy复制的完整行, 则粘贴在光标所在行下面。这里?可以是一个字母,也可以是一个数字 ?P 将寄存器a中的内容粘贴到光标位置之前。如果?是用yy复制的完整行, 则粘贴在光标所在行上面。这里?可以是一个字母,也可以是一个数字 ay[motion] ay$ 复制光标位置到行末并保存在寄存器a中 ayft 复制光标位置到当前行第一个字母t并保存在寄存器a中 以上指令皆可去掉a工作,则y,p对未命名寄存器工作(所有d,c,x,y的对象都被保存在这里)。 剪切/复制/粘贴 所有删除的内容自动被保存,可以用p键粘贴 Vi的选项设置 all 列出所有选项设置情况 term 设置终端类型 ignorance 在搜索中忽略大小写 list 显示制表位(Ctrl+I)和行尾标志($) number 显示行号 report 显示由面向行的命令修改过的数目 terse 显示简短的警告信息 warn 在转到别的文件时若没保存当前文件则显示NO write信息 nomagic 允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan 禁止vi在搜索到达文件两端时,又从另一端开始 mesg 允许vi显示其他用户用write写到自己终端上的信息 tips 对代码自动格式化 gg=G 在vi/vim中,跳到文件首尾快捷键: 文件开始:shift + g 文件结束:g g
窗口设置
你也可以用鼠标上下拖动状态行来改变窗口的高度,或者左右拖动垂直分割线来改变窗口宽度。这些功能只有在支持鼠标的版本里,并且设置了 'mouse' 选项才可以用。
选项 'winheight' ('wh') 用来设置当前窗口的最小高度。每当其它窗口变为当前窗口的时候,这一选项就会生效。如果设置为 0,则禁用。把 'winheight' 设一个很大的值,例如,'9999',就使得当前窗口永远占据尽可能大的空间。尽量设置成一个编辑时比较舒服的值,比如说,'10' 就是一个合理的值。
同样,'winwidth' ('wiw') 选项设定了当前窗口的最小宽度。
如果置位了 'equalalways' ('ea') 选项,在分割或者关闭窗口之后,所有窗口都会变为相同大小。如果你不置位这个选项,分割窗口时会减少当前窗口的大小,而其它窗口保持不变。当关闭窗口时,多出来的行会被上面的窗口占用。
选项 'eadirection' 用来限制 'equalalways' 的作用方向。默认值是 "both",两个方向都改变。当设置为 "ver" 时,只限制所有窗口的高度必须相同,这样你可以自己调节窗口的宽度。而垂直分割窗口的大小如果经过手工调整,其宽度也不会被破坏。同样,"hor" 使得窗口的宽度都相等。
选项 'cmdheight' ('ch') 用来设置命令行的高度。如果你对 |hit-enter| 的提示信息感到厌烦,可以将它设置为 2 或 3。
如果只有一个窗口,那么改变该窗口大小的同时也会改变命令行的高度。如果有多个窗口,那么改变当前窗口的大小也会改变它下面的窗口 (有时是上面的窗口) 的高度。
一个窗口的最小高度和最小宽度可以用 'winminheight' 和 'winminwidth' 设定。这是硬性值,一旦设定,窗口的高度 (或宽度) 将不能小于该值。
多标签
进入vim前
vim -p <文件名> 以多标签形式打开文件。如vim -p * 就是编辑当前目录的所有文件,
vim编辑中
:tabnew 增加一个标签
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 或gT 前一个
:tabn 或gt 后一个
新建标签页
:tabe <文件名> 在新标签页中打开指定的文件。
:tabnew <文件名> 在新标签页中编辑新的文件。
:tab split 在新标签页中,打开当前缓冲区中的文件。
:tabf 允许你在当前目录搜索文件,并在新标签页中打开。比如:tabf img.*。此命令只能打开一个文件.
Vim默认最多只能打开10个标签页。你可以用set tabpagemax=15改变这个限制。
列示标签页
:tabs 显示已打开标签页的列表,并用“>”标识出当前页面,用“+”标识出已更改的页面。
关闭标签页
:tabc 关闭当前标签页。
:tabo 关闭所有的标签页。
切换标签
:tabn或gt 移动到下一个标签页。
:tabp或gT 移动到上一个标签页。
:tabfirst或:tabr 移动到第一个标签页。
:tablast 移动到最后一个标签页。
移动标签页
:tabm [次序] 移动当前文件的标签页次序。比如:tabm 1将把当前标签页移动到第2的位置。如:tabm不指定参数将被移动到最后。
配置标签页
:set showtabline=[1,2,3] 标签页在窗口上方显示标签栏。=0完全不显示标签栏,=1只有用户新建时才显示,=2总是显示标签栏。
多标签页命令
:tabdo <命令> 同时在多个标签页中执行命令。比如:tabdo %s/food/drink/g 命令把当前多个标签页文件中的“food”都替换成“drink”。
帮助
:help tab-page-intro命令,可以获得关于标签页使用的更多信息。
多标签
进入vim前 vim -p <文件名> 以多标签形式打开文件。如vim -p * 就是编辑当前目录的所有文件, vim编辑中 :tabnew 增加一个标签 :tabc 关闭当前的tab :tabo 关闭所有其他的tab :tabs 查看所有打开的tab :tabp 或gT 前一个 :tabn 或gt 后一个 新建标签页
:tabe <文件名> 在新标签页中打开指定的文件。
:tabnew <文件名> 在新标签页中编辑新的文件。
:tab split 在新标签页中,打开当前缓冲区中的文件。 :tabf 允许你在当前目录搜索文件,并在新标签页中打开。比如:tabf img.*。此命令只能打开一个文件. Vim默认最多只能打开10个标签页。你可以用set tabpagemax=15改变这个限制。 列示标签页 :tabs 显示已打开标签页的列表,并用“>”标识出当前页面,用“+”标识出已更改的页面。 关闭标签页 :tabc 关闭当前标签页。
:tabo 关闭所有的标签页。 切换标签 :tabn或gt 移动到下一个标签页。
:tabp或gT 移动到上一个标签页。 :tabfirst或:tabr 移动到第一个标签页。
:tablast 移动到最后一个标签页。 移动标签页 :tabm [次序] 移动当前文件的标签页次序。比如:tabm 1将把当前标签页移动到第2的位置。如:tabm不指定参数将被移动到最后。 配置标签页 :set showtabline=[1,2,3] 标签页在窗口上方显示标签栏。=0完全不显示标签栏,=1只有用户新建时才显示,=2总是显示标签栏。多标签页命令 :tabdo <命令> 同时在多个标签页中执行命令。比如:tabdo %s/food/drink/g 命令把当前多个标签页文件中的“food”都替换成“drink”。帮助
:help tab-page-intro命令,可以获得关于标签页使用的更多信息。
窗口
1、打开多个窗口(vim编辑中) 打开多个窗口的命令以下几个: 横向切割窗口 :new+窗口名(保存后就是文件名) :split+窗口名,也可以简写为:sp+窗口名 纵向切割窗口名 :vsplit+窗口名,也可以简写为:vsp+窗口名 vim -o file1 file2 ... #水平打开多窗口, vim -O file1 file2 ... #垂直打开多窗口, vim -d file1 file2 ... #垂直打开多窗口,并且进行比较 vimdiff file1 file2 .. #等同于上一句 2、关闭多窗口 可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。 关闭窗口 q 或 close #关闭当前窗口 only #保留当前窗口,关闭其它所有窗口 qall(qa) #退出所有窗口 wall #保存所有窗口 3、窗口切换 :ctrl+w+j/k,通过j/k可以上下切换,或者:ctrl+w加上下左右键,还可以通过快速双击ctrl+w依次切换窗口。 4、窗口大小调整 纵向调整 :ctrl+w + 纵向扩大(行数增加) :ctrl+w - 纵向缩小 (行数减少) :res(ize) num 例如::res 5,显示行数调整为5行 :res(ize)+num 把当前窗口高度增加num行 :res(ize)-num 把当前窗口高度减少num行 横向调整 :vertical res(ize) num 指定当前窗口为num列 :vertical res(ize)+num 把当前窗口增加num列 :vertical res(ize)-num 把当前窗口减少num列 5、给窗口重命名 :f file 6、vi打开多文件(进入vim前) vi a b c :n 跳至下一个文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件 :e# 回到刚才编辑的文件 7、文件浏览 :Ex 开启目录浏览器,可以浏览当前目录下的所有文件,并可以选择 :Sex 水平分割当前窗口,并在一个窗口中开启目录浏览器 :ls 显示当前buffer情况 8、vi与shell切换 :shell 可以在不关闭vi的情况下切换到shell命令行 :exit 从shell回到vi
vim 标签页 tabnew 等的操作命令
对于vim这个 ide来说, 单纯的用 多子窗口 来操作, 感觉还是不够的, 还要结合标签页tab pages来,才能更好的操作.
- 所有关于标签 的 命令行 命令都是 以 :tab开始的, 可以用tab键来查看提示
- 直接的再 普通模式下的 切换标签页 的命令是 gt, gT: go tab
:tabnew 新建标签
:tabc 关闭标签, :tabo 关闭其他所有标签 tab other closed
关于切换
:tabfirst 切换到第一个标签
:tablast 切换到最后一个标签
:tabp = tab previous
:tabn = tab next
查看标签
:tabs tab show, 或者 tab的复数: tabs
:tabe: tab edit : 在标签页中 打开 文件.