VIM

介绍vim的使用

VIM编辑器

通过vim命令打开文件,默认进入的就是正常模式

VIM正常模式

普通编辑命令

x               #删除光标所在字符(=d+h)
X               #删除光标前一个字符(=d+l)

D               #删除当前行光标位置到行尾的字符(=d+$)
dd              #删除光标所在的行

J               #删除光标所在行的换行符 (将原先光标下一行的内容,变成当前行内容)

p               #在光标后粘贴
P               #在光标前粘贴
xp              #交换两个连续字符的位置(通过x删除光标所在字符,通过p在光标后粘贴之前x删除的内容实现连续字符的位置交换)
ddp             #交换两行的位置(通过dd删除光标所在字符,通过p在光标后粘贴之前dd删除的内容实现连续两行的位置交换)

u               #撤销前一个操作
ctrl+r          #恢复前一个操作(撤销之后不想撤销了可通过此命令恢复)

可以配合数字n进行n次批量操作;如3x,则删除当前光标及其后面两个字符;如3dd,则删除当前光标及其后面两行字符

说明:x和dd作为删除命令执行后,删除的内容保存在缓冲区。粘贴命令调用缓冲区内最新的内容(与剪切类似)

控制命令

字符级命令
h或者键盘向左键        #光标左移一个字符
l或者键盘向右键        #光标右移一个字符
j或者键盘向下键        #光标向下移一行
k或者键盘向上键        #光标向上移动一行

可以配合数字n进行n次批量操作
单词级命令
w         #下一个单词的词首
W         #空白字符分割的下词词首

b         #上一个单词的词首
B         #空白字符分割的上词词首

e         #下个单词的词末
E         #空白字符分割的下词词末

ge       #上一个单词的词末
GE       #空白字符分割的上词词末

光标在单词内时,b/e命令的结果是移动到本单词的词首/词末

命令前+数字n,执行n次命令

行级命令
$                       #当前行行尾
0                       #当前行的第一个字符
^                       #当前行的第一个非空字符

移动到指定字符
   f+单个字符            #在本行内向右移动到指定字符
   F+单个字符            #在本行内向左移动到指定字符
   t+单个字符            #在本行内向右移动到指定字符的前一个字符
   T+单个字符            #在本行内向左移动到指定字符的前一个字符
   在命令前加数字n来定义移动到行内第几个指定字符

%                       #在“()”“【】”“{}”类符号的首尾间切换

1G或gg                   #文本第一行行首
nG                      #移动到第n行行首
n%                      #按百分比近似定位到某行
G                       #文本末行行首
屏幕级命令
H               #屏幕顶部行首

M               #屏幕中央行首

L               #屏幕底部行首

zt              #使光标所在位置移动到屏幕的顶部(所有内容做移位)

zz              #使光标所在位置移动到屏幕的中央(所有内容做移位)

zb              #使光标所在位置移动到屏幕的底部(所有内容做移位)

ctrl+b          #上移一屏

ctrl+f          #下移一屏

ctrl+u          #上移半屏

ctrl+d          #下移半屏

ctrl+e          #上滚一行

ctrl+y          #下滚一行

操作符

d操作符

作用:把选择的内容存入寄存器(相当于删除)

dd          #删除当前行
ndd         #自当前行起删除连续的n行
c操作符

change把选择的内容存入寄存器,并进入编辑模式

y操作符

作用:把选中的内容复制到寄存器中

yw          #拷贝一个单词
ynw         #拷贝n个单词
ye          #拷贝一个单词(不包括单词结尾空格)
yne         #拷贝n个单词
yy          #拷贝一行
nyy         #拷贝n行
y$          #拷贝从当前位置到行尾
yG          #拷贝从当前位置到文尾

所有的操作符(包括d操作符)存入寄存器的内容都适用于p/P粘贴命令。

VIMinsert模式

在正常模式下如果以下字母可以进入到insert模式,然后就可以对文件进行编辑了。

i               #在光标前插入字符,进入insert模式
I               #在行首插入字符,进入insert模式

a               #在光标后插入字符,进入insert模式
A               #在行尾插入字符,进入insert模式

o               #在光标下方插入空行,进入insert模式
O               #在光标上方插入空行,进入insert模式

s               #删除光标位置字符,并进入insert模式
S               #删除光标所在行,并进入insert模式

c               #删除光标所在行的字符,并进入insert模式
C               #删除光标所在位置到行尾的字符,并进入insert模式

VIM命令行模式

查找命令

/+字符或字符串        #查找字符或字符串,如果有多个可以通过n和N进行上下跳转

设置命令“:”

保存退出
:+w                 #保存文本,不退出vim
:+wq                #保存并退出vim(不管是否有修改,文件修改时间都会更新)
:+x                 #若有修改,则保存并退出vim;若无修改,则直接退出vim
:+X                 #设置密码
:+q                 #未对文件进行修改时,直接退出vim
:+q!                #强制对出vim(放弃修改)
:+e!                #放弃修改并重新打开该文本
环境设定
:+set nu                    #显示行号
:+set nonu                  #隐藏行号
:+set ruler                 #显示光标位置信息
:+set noruler               #隐藏光标位置信息
:+set hlsearch              #高亮匹配
:+set nohlsearch            #取消高亮匹配
:+nohlsearch                #临时取消高亮(只取消一次查询的高亮)
:+set ic                    #忽略大小写
:+set noic                  #区分大小写当前命令,忽略大小写则+\c     
                             #如使用查找命令,/test\c表示查找test并忽略大小写
:+set incsearch             #在输入字符串过程中显示匹配点
:+set nowrapscan            #找到文尾后停止查找
:+set wrapscan              #恢复为到文尾后自动从头开始
:+set paste                 #复制的时候保留原格式

环境设置仅当前有效,退出之后就无效了,如果希望可以永久生效可以去修改vim的配置文件/etc/vimrc 
替换(查找然后替换)
:s@old@new@             #光标所在行的第一个old替换为new(old和new可以是字符也可以是字符串,符号@可以替换为别的任意特殊符号)
:x,ys@old@new@g         #x行到y行的所有old替换为new 
注意:参数g表示全局,不加g则只替换每行的第一个old
     参数x替换为“.”,则从当前行开始
     参数y替换为“$”,则到最后一行为止
:%s@old@new@gc          #全局替换,替换文本中所有old为new 注意:参数c,即为每次替换均需要确认

VIM可视模式

v           #字符可视模式。可进行字符的逐个选择
V           #行可视模式。按行选择,参照字符选择
ctrl+v      #块可视模式。选择屏幕的一个矩形区域,以进入可视模式时的光标位置为一角,以光标当前位置为对角
        o       #把光标移动到矩形的对角
        O       #把光标移动到水平位置的另一角
        常用方式
            d:删除选择区域
            进入insert模式(I(shift+i)):在选择区域前面插入相同内容