vim命令

知识点

  • . 重复前一次命令
  • N 重复某个命令N次
  • 键入:或/后,按上下箭头选择历史命令
  • 自动提示:insert模式 和
  • qa…录制宏a,@a使用宏a,@@使用最新的宏

    在一个只有一行且这一行只有“1”的文本中,键入如下命令:
    qa Yp <C-a> q
    qa      开始录制
    Yp      复制行
    <C-a>   增加1
    q       停止录制
    @a      在1下面写下2
    @@      在2下面写下3
    100@@   创建新的100行,并把数据增加到103
    

文件命令

vim file1 file2 file3 ...      同时打开多个文件
:open file                     窗口打开新文件
:split file                    新窗口打开文件
:bn                            切换到下一个文件
:bp                            切换到上一个文件
:args                          查看当前打开的文件列表,当前正在编辑的文件会用[]括起来
:e ftp://192.168.10.76/abc.txt 打开远程文件,比如ftp或者share folder
:e <path/to/file>              打开新文件
:saveas <path/to/file>         另存为

移动命令

h 左移一个字符
l 右移一个字符
k 上移一个字符
j 下移一个字符

w 向后移动一个单词(光标停在单词首部)
b 向前移动一个单词(光标停在单词首部)
e 向后移动一个单词(光标停在单词尾部)
ge 前后移动一个单词(光标停在单词尾部)

^  到行头非空白字符
0  到行头
$  到行尾 3$ 移动到下面3行的行尾
g_ 到行尾非空白字符

t,   到逗号前的第一个字符
fa   到下一个为a的字符处
3fa  到下第3个为a的字符处
F/T  和f/t方向相反

gg 移动到文件头
G  移动到文件尾
:n nG ngg 跳到指定n行

Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏

导航命令

%     括号匹配

插入命令

i     在当前位置生前插入
I     在当前行首插入
a     在当前位置后插入
A     在当前行尾插入
o     在当前行之后插入一行
O     在当前行之前插入一行

cw    替换从光标所在位置后到一个单词结尾的字符

查找命令

/text  查找text,n下一个,N前一个
?text  查找text,反向查找,n下一个,N前一个
*        /查找当前单词
#        ?查找当前单词

:set ignorecase    忽略大小写的查找
:set noignorecase  不忽略大小写的查找

:set hlsearch    高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配
:set nohlsearch  关闭高亮搜索显示
:nohlsearch      关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮

:set incsearch   逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成

:set wrapscan    重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启

特殊字符查找时需要转义  .*[]^%/?~$

替换命令

ra 将当前字符替换为a,当期字符即光标所在字符。

:s/old/new/ 用old替换new,替换当前行的第一个匹配
:s/old/new/g 用old替换new,替换当前行的所有匹配
:%s/old/new/ 用old替换new,替换所有行的第一个匹配
:%s/old/new/g 用old替换new,替换整个文件的所有匹配

:10,20 s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进

3,5 s/^/#/g 注释第3-5行
3,5 s/^#//g 解除3-5行的注释
1,$ s/^/#/g 注释整个文档
:%s/^/#/g   注释整个文档

gU 变大写
gu 变小写

撤销与重做

u           撤销(Undo)
U           撤销对整行的操作
Ctrl + r    重做(Redo),即撤销的撤销

删除命令

x dl 删除当前字符
X dh 删除当前字符的前一个字符

D d$ 删除当前字符至行尾

dj 删除当前行和上一行
dd 删除当前行
dk 删除当前行和下一行

10d 删除当前行开始的10行

dgg 删除当前行之前所有行(包括当前行)
dG  删除当前行之后所有行(包括当前行)
dt" 删除当前光标与"之间的内容

:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d  删除所有行

J  合并两行

拷贝/剪切/粘贴

yy  拷贝当前行
nyy 拷贝当前后开始的n行

x X   剪切字符
dd    剪切当前行
ndd   剪切当前后开始的n行

p 在当前光标后粘贴
P 在当前行前粘贴

:1,10 co 20   将1-10行插入到第20行之后
:1,$ co $     将整个文件复制一份并添加到文件尾部

:1,10d        1-10行剪切
:1, 10 m 20   将第1-10行移动到第20行之后

退出命令

:wq 保存并退出
ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件

窗口命令

:split file或:new file 用新窗口打开文件
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口

Ctrl+ww 移动到下一个窗口
Ctrl+wj 移动到下方的窗口
Ctrl+wk 移动到上方的窗口

<C-w>_ 或 <C-w>|     最大化尺寸
<C-w>+ 或 <C-w>-     增减尺寸

:close   关闭窗口
:only    关闭除当前窗口外窗口

执行shell命令

:!command

:!ls 列出当前目录下文件

:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便

:suspend或Ctrl+Z 挂起vim,回到shell,按fg可以返回vim

其他

:set ruler?  查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看

:scriptnames  查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等

:set list 显示非打印字符,如tab,空格,行尾等。
如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格

进阶操作1

<start position><command><end position>

例如 0y$ 命令意味着:
0   先到行头
y   从这里开始拷贝
$   拷贝到本行最后一个字符

ye      从当前位置拷贝到本单词的最后一个字符
y2/foo  拷贝2个 “foo” 之间的字符串

进阶操作2

<action>a<object> 和 <action>i<object>

action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]
假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置。

vi"    会选择 foo.
va"    会选择 "foo"
vi)    会选择 "foo"
va)    会选择("foo")
v2i)   会选择 map (+) ("foo")
v2a)   会选择 (map (+) ("foo"))

进阶操作3

块操作 v,V,<C-v>
1、在选中行头添加(多行注释)
0 <C-v> <C-d> I 字符 [ESC]
    ^0             到行头
    <C-v>          块操作
    <C-d>          向下移动 (你也可以使用hjkl来移动光标,或是使用%等)
    I 字符 [ESC]   I是插入,插入字符,ESC键生效

2、在选中行尾添加
<C-v> <C-d> A-- [ESC]
    <C-v>
    <C-d>          选中相关的行 (可使用j或是/pattern或是%等)
    $              到行最后
    A 字符 [ESC] 
    
3、选中后还可以
J        把所有的行连接起来(变成一行)
< 或 >   左右缩进
=        自动给缩进
原文地址:https://www.cnblogs.com/luoyangyang/p/11586164.html