简介
基本概念
vi编辑器是所有Unix及Linux系统下标准的编辑器。而vim包含了vi的所有功能,而且做了很多改进,功能更加强大。简单来说,vi适合文本编辑,而vim更适合codeing。这里只是简单地介绍一下它常用的一部分指令。
三种模式
基本上vi/vim可以分为三种状态:
- 命令模式(command mode)
- 插入模式(insert mode)
- 和底行模式(last line mode)。
命令行模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按
ESC
键可回到命令行模式。
底行模式(last line mode)
将文件保存或退出vi/vim,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi/vim简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。
命令
常用命令
首先打开命令行界面,在目录下新建一个测试文件test.txt
vi test.txt
进入vi
单文件编辑
vi test.txt
多文件编辑
在使用vi/vim的时候,可能会碰到你需要复制一个文件中的某段到另外一个文件中,而vi/vim不能够在关闭的时候,把这段保留住。或者是用其它的方法复制。这时,就需要使用多文件编辑。
vim file1 file2
在底行模式下
-
:编辑下一个文件n
-
:编辑上一个文件N
-
:列出目前这个vi/vim编辑的所有文件files
多窗口功能
-
:开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新文件,否则表示两个窗口为同一个文件内容(同步显示)。sp filename
-
:按键的按法是:先按下 【ctrl】 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口。ctrl+w+j
-
:同上ctrl+w+↓
-
:同上,不过光标移动到上面的窗口。ctrl+w+k
-
:同上ctrl+w+↑
进入vi/vim之后,是处于「命令行模式(command mode)」。
命令行模式常用命令
移动光标
- 利用键盘的↑,↓,←,→键
-
:屏幕往后移动一页ctrl+b
-
:屏幕往前移动一页ctrl+f
-
:屏幕往后移动半页ctrl+u
-
:屏幕往前移动半页ctrl+d
-
: 就可以到这一页的结尾了.shift+g
-
:移动到文章的开头.gg
-
:将光标移动到行尾$
-
:将光标移到行头^
-
:将光标移到下一行头w
-
:跟b
相反.移到上一行行头w
-
:将光标移到下一行尾.e
块选择
-
:字符选择,会将光标经过的地方反白选择v
-
:行选择,会将光标经过的行反白选择V
-
: 块选择,可以用长方形的方式选择资料 (提制竖列)Ctrl+v
删除
在命令行下使用
backplace
键是不可以删除内容的。
-
:每按一次,删除光标所在位置的“后面”一个字符。x
-
:删除选中内容。delete
-
:删除选中内容d
-
:例如,#x
表示删除光标所在位置的“后面”6个字符。6x
-
:删除光标所在位置的“前面”一个字符。X
-
:例如,#X
表示删除光标所在位置的“前面”20个字20X
-
:删除光标所在行。dd
-
:从光标所在行开始删除#行#dd
-
:删除光标所在行到第一行的所有数据d1G
-
:删除光标所在到最后一行的所有数据dG
-
:删除光标所在处,到该行的最后一个字符d$
-
:删除光标所在处,到该行的最前一个字符d0
复制粘贴
-
:将光标所在之处到字尾的字符复制到缓冲区中yw
-
:复制光标所在行到缓冲区yy
-
:复制光标所在的向下n列#yy
-
:复制光标所在行到第一行的所有数据y1G
-
:复制光标所在行到最后一行的所有数据yG
-
:复制光标所在的那个字符到该行行首的所有数据y0
-
复制光标所在的那个字符到该行行尾的所有数据y$
-
:将缓冲区内的字符贴到光标所在位置。注意:所有与y有关的复制命令都必须与”p”配合才能完成复制与粘贴功能p
-
将已复制的数据在光标下一行粘贴上p
-
则为贴在光标的上一行P
替换
-
:替换光标所在处的字符。r
-
:替换光标所到之处的字符,直到按下R
键为止。ESC
undo
-
:如果误执行一个命令,可以马上按下u
,撤消上一个操作。按多次u
可以执行多次撤消。u
redo
-
:重做上一个操作ctrl+r
进入Insert mode
-
:从光标当前位置开始插入;i
-
: 从目前所在行的第一个非空格符处开始插入;I
-
:从目前光标所在位置的下一个位置开始插入;a
-
:从光标所在行的最后一个字符处开始插入;A
-
:在目前光标所在处的下一行插入新的一行;o
-
:在目前光标所在处的上一行插入新的一行;O
-
:进入插入模式后,是删除当前光标的下个文字,然后开始插入;s
-
:进入插入模式后,是删除当前光标的所在行,然后开始插入;S
-
:进入插入模式后,是删除当前光标的所在行,然后开始插入;cc
-
:进入插入模式后,是删除当前光标的所在行,然后开始插入;C
-
:进入插入模式后,是删除当前光标的所在行,然后开始插入;cw
进入last line mode。
按:即可进入last line mode。
插入模式常用命令
移动光标
- 利用键盘的
键↑,↓,←,→
删除
- 使用
键。backplace
- 可以选中内容,按
键删除选中内容。delete
复制
-
:将光标所在之处到字尾的字符复制到缓冲区中。yw
-
:复制光标所在行到缓冲区。yy
-
:例如,#yy
表示拷贝从光标所在的该行”往下数”6行文字6yy
-
:退出插入模式,将缓冲区内的字符贴到光标所在位置。注意:要退出插入模式后才能使用p命令p
退出insert mode
按esc即可退出insert mode
进入last line mode。
先按esc退出insert mode。后按:即可进入last line mode。
底行模式常用命令
在使用last line mode之前,请记住先按ESC键确定您已经处于command mode下后,再按:冒号即可进入last line mode。
行号
-
:输入set nu
后,会在文件中的每一行前面列出行号。set nu
-
: 与 set nu 相反,为取消行号显示set nonu
跳到文件中的某一行
-
:#
号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了。#
查找
-
:先按/键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按/关键字
向下查找,也可以按n
向下查找。N
-
:先按?键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按?关键字
向下查找,也可以按n
向下查找。N
替换
-
:n1与n2为数字,在第n1与n2行之间查找word1 这个字符串,并将该字符串替换为word2:n1,n2s/word1/word2/g
-
:从第一行到最后一行查找word1字符串,并将该字符串替换为word2:1,$s/word1/word2/g
-
:从第一行到最后一行查找word1字符串,并将该字符串替换为word2 ,且在替换前提示用户确认是否进行替换:1,$s/word1/word2/gc
保存
-
:在冒号输入字母w
就可以将文件保存起来。w
-
: 将编辑的数据保存成另一个文件(类似另存)w filename
-
: 在编辑的数据中,读入另一个文件的数据。即将filename这个文件的内容加到光标所在行后面。r filename
-
: 将n1到n2的内容保存成filename这个文件n1,n2 w filename
-
:暂时离开vi/vim 到命令行模式下执行command的显示结果!例如 【:! ls /home】即可在 vi/vim当中察看/home底下以ls输出的文件信息。! command
退出vi/vim
-
:按q
就是退出,如果无法离开vi/vim,可以在q后跟一个q
强制离开vi/vim!
-
:一般建议离开时,搭配qw
一起使用,这样在退出的时候还可以保存文件。w
vim特性
环境设置
环境设置参数命令
- :set nu 设置行号
- :set nonu 取消行号
- :set hlsearch 设置高亮度查找
- :set nohlsearch 取消高亮度查找
- :set backup 自动备份文件
- :set ruler 开启右下角状态栏说明
- :set showmode 显示左下角的INSERT之类的状态栏
- :set backspace={0,1,2} 设置退格键功能。为2时可以删任意字符。为0或1时仅可以删除刚才输入的字符。
- :set all 显示目前所有的环境参数值
- :set 显示与系统默认值不同的参数值
- :syntax on/off 是否开启依据相关程序语法显示不同的颜色
- :set bg=dark/light 是否显示不同的颜色色调
没有必要每次使用vim都要重新设置各个参数值。我们可以通过配置文件来设置vim操作环境。vim的设置值一般是放在/etc/vimrc中的。一般不要修改这个文件。可以通过修改~/.vimrc这个文件,如果不存在,可以手动创建。然后将我们所希望的设置值写入。例如,我们可以这样写:
vim ~/.vimrc
set hlsearch
set nu
创建并保存这个文件之后,当下次重新以vim编辑某个文件时,该文件的默认环境就是这么设置的。