vi的操作模式

一 vi的操作模式
vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。在输入模式下,用户可输入文本资料。在指令模式下,可进行删除、修改等各种编辑动作。
在输入模式下,按Esc键切换到指令模式下。
在指令模式下,按输入指令(i、a、o等)进入输入模式。


二 进入vi

$ vi   filename

直接键入“vi + 所要编辑的文件名”,即可对指定的文件进行编辑。
如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。

$ view filename

以只读方式打开文件filename

三 指令模式
3.1 进入输入模式

a      在当前游标之后输入
A      在当前行之末输入
   i      在当前游标之前输入
   I      在当前行之首输入
o      在当前行之下新增一行,并在新增行输入
O      在当前行之上新增一行,并在新增行输入
输入结束后,按Esc键退出输入模式


3.2 游标移动

h 向左移动一个字元
l 向右移动一个字元
j 向下移动一个字元
k 向上移动一个字元
b 左移一个单词,至词首
w 右移一个单词,至词尾
0
移到当前行行首
$ 移到当前行行尾
+ 移至下一行的行首
- 移至上一行的行首
H 移至视窗的第一行
M 移至视窗的中间一行
L 移至视窗的最后一行
G 移至该文件的最后一行
nG 移至该文档的第n行
n+ 下移n行
n- 上移n行

3.3 视窗移动

 <Ctrl> + f 视窗下卷一页
 <Ctrl> + b 视窗上卷一页
<Ctrl> + d 视窗下卷半页
<Ctrl> + u 视窗上卷半页
 <Ctrl> + e 视窗下卷一行
 <Ctrl> + y 视窗上卷一行

3.4 删除操作

x 删除游标所在字元
X 删除游标前一字元
dw 从游标当前位置开始向后删除一个单词
db 从游标当前位置开始向前删除一个单词
d0 从行首删除至当前游标位置
d$ 从游标当前位置删除至行尾
dd 删除游标所在行
D 同d$

3.5 修改操作

s 修改游标所在字元,修改完成后按Esc键结束
S 修改整行内容,修改完成后按Esc键结束
r 替换当前游标所在字元
R 进入替换状态,直至按Esc键结束
cw 修改一个单词(从游标位置至词尾)
cb 修改一个单词(从词首至游标位置)
cc 修改整行内容,完成后按Esc键结束,同S
c0 修改行首至游标位置的内容
c$ 修改游标位置至行尾的内容
~ 游标所在字元大小写切换

3.6 指令重复
在指令模式中,可在指令前面加入一个数字n,则该指令会重复执行n次。常用的重复操作有:

nx 删除n个字元
ndd 删除n行
ns 修改n个字元

3.7 取消前一动作(Undo)

u 撤消上一指令的结果

3.8 查找字符串

/字符串 从当前游标向后查找该字符串
?字符串 从当前游标向前查找该字符串
n 从当前游标向后查找下一个字符串
N 从当前游标向前查找下一个字符串

3.9 查看编辑状况

<Ctrl> + g 显示正在编辑的文件名、当前游标所在行数、文件总行数、文件是否被修改


四 保存与退出

:w 保存,但不退出
:wq 保存并退出
:x 同:wq
:q 退出,如果当前文件没有保存,禁止退出
:q! 不保存退出
:w file1 将内容保存至文件file1中,注意:此时编辑的仍为原文件
:w! file1 将内容覆盖保存至文件file1中,如文件file1存在,:w file1将禁止执行

 

五 环境设置

 

:set 显示已设置的环境状况
:set all 显示所有的环境设置选项
:set nu 显示行号
:set nonu 不显示行号
:set ts
= n 设置Tab键的长度为n

六 执行指令
以下用具体的数字为例进行介绍,数字表示行数,游标所在行可用“.”代替,文件最后一行可用“$”代替。

: 10 , 20d 删除第10行至第20行的内容
:10d 删除第10行的内容
:%d 删除全部内容
:
10 ,
20co30 将第10行至第20行的内容复制到第30行之后
:
10 ,
20mo30 将第10行至第20行的内容移动到第30行之后
:
1 ,
$s/old/new 将第1行至最后一行中的old替换成new
:
1 ,
$s/^/new 将第1行至最后一行的内容前面插入new
:
10 将游标移至第10行

七 重复指令

. 重复上一条指令


八 切换到shell状态

:sh 切换到shell状态,exit返回

 

-----------------------------------------------------------------------------------------------------------------------------------
): 光标移至句尾

(: 光标移至句首

}: 光标移至段落开头

{: 光标移至段落结尾

---------------------------------------------------环境设置------------------------------------------------------------------
对应Emacs中的某些功能
:set smartindent 自动对齐。
:syntax on 关键字上色。
:set sm 显示符号对匹配。
:set cin C风格缩进。
:set number 在屏幕左边显示行号。
:set ruler 在右小角显示行号,百分比。
:set ignorecase/noignorecase 打开/关闭 忽略大小写标记。
:set hlsearch 高亮显示查找字串 可以使用:nohlsearch关闭当前搜索的高亮。
:set incsearch 增长型的查找字符串。
:set nowrapscan 循环搜索。

---------------------------------------------------------------------命令执行----------------------------------------------------------------------------------
u 撤销一次修改,可以一直往后退。
C-r 撤销一次u操作。
U 撤销在某一行上的所有修改(不知道这个所有时间范围有多大...),再敲一次U的话又把修改添回去。
命令计数:num+command 例如10x。对于某些添加命令,要敲esc结尾,例如 10aword<esc>将添加10个word到文本buffer中。
保存退出:ZZ
:e! 不保存任何修改,重载文件。

-------------------------------------------------------------------移动----------------------------------------------------------------------------------------
e 移动到下一个单词的最后的字符上,与w对应,w是移动到下一个单词的首字符上。
ge移动到前一个单词的首字符上,与b对应。
大写的E gE W B以iskeywords定义的边界移动。
$ = home 0=end ^移动到此行的第一个非空字符上。
f+字符 前向找字符 F+字符 反向找字符。类似的有t跟T,区别在于光标停留的位置。
%跳转到匹配的符号对上,符号对在matchpairs中定义。 还有个用处就是带数字执行,如50%,表示跳转到文件buffer的百分之50处。
j/k 从当前位置向前/后跳,支持命令计数。
num+G 跳转到第num行。不加num的话就跳到最后一行。gg跳转到第一行。
H M L表示跳转到当前屏幕的开头、中部、末尾。
C-g 显示当前文件信息。
C-U 往上滚半屏 C-U往下滚半屏 C-E往上滚一行 C-Y往下滚一行 C-F 往下滚一屏-两行 C-B 往上滚一屏-两行
zz zb zt 将当前行置为屏幕 中间/底部/首行。
*/# 正/反向搜索当前光标所在的单词。
/> /< 只匹配单词的结尾/开始,可以用来匹配完全符合查找串的字词,如//<the/>只匹配 the,而不会匹配 there。
ma~mz 定义以26个英文字母命名的标记。 所有的marks都可以用:marks查看。
单引号" ' "+mark将跳转到mark所在的行;飘号+mark将跳转到mark所在的字符上。
"."点号 重复上次操作。

-------------------------------------------------------------------区域选择-----------------------------------------------------------------------------------
visual模式,高亮显示选中的区域。
v 普通模式,选中的区域取决于输入的指令 V 以行为单位操作。
o 跳转至区域的另一端 O 在区域两端之间跳转。
p/P 置缓冲区中的内容至光标后/前。

-----------------------------------------------------------TAGS------------------------------------------------
1.生成tags文件    :!ctags -R .     //生成ctag文件
2.跳到某个tag     :tag [indent]    // indent 为查找的关键字, 或者为当前光标所在的单词(C-])。
3.跳回前一tag     :pop              //C-T
4.列举相同tag     :ts [indent]
5.列出跳转历史    :tags

----------------------------------------------------------代码对齐---------------------------------------------
自动格式化代码 gg=G
对齐当前行 ==

-----------------------------------------------------------窗口切换-------------------------------------------------------
分割窗口 :split
窗口间跳转 C-w + 方向健
关闭窗口 :close
关闭除当前活动窗口外所有的窗口 :only
为一新文件分格出新窗口 :new filename OR :split filename
增大减少窗口大小(支持命令计数)C-w +/-

----------------------------------------------------------标签页-----------------------------------------------------------
:tab系列,没几个,用的时候按下tab好了

----------------------------------------------------------普通加密----------------------------------
:X 输入密码后保存。 加密
:set key= 保存。 解除文件加密
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值