China FreeBSD

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命令,可以获得关于标签页使用的更多信息。

窗口

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来,才能更好的操作.

  1. 所有关于标签 的 命令行 命令都是 以 :tab开始的, 可以用tab键来查看提示
  2. 直接的再 普通模式下的 切换标签页 的命令是 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 : 在标签页中 打开 文件.