vim 入门到进阶
vim 有四种使用模式
- 编辑模式, 按
ESC
切换 - 写入模式, 在编辑模式 按
a
i
切换 - 可选模式, 在编辑模式 按
v
V
切换 - 命令模式, 在编辑模式 按
:
切换
编辑模式
vim newtext.txt # bash命令下,如果当前没有文件则会新建一个空文件.
:e /home/alice/newtext.txt # vim 命令模式下打开文件.
:w ... # 写入文件
:q ... # 退出文件
:q! ... # 强制退出文件,修改文件但未保存会有提示,强制退出则不提示.
:wq ... # 保存并退出文件,加!可强制保存退出.
/ xxx # xxx是字符串, 寻找字符串,n 或 N 上下查询.
. # 重复上一次的操作
编辑文件
[插入] 在
编辑模式
下输入 A
光标 前
输入 a
光标 后
输入 i
首
输入 I
尾
输入 o
上一行
输入 O
下一行
输入 [修改] 在
编辑模式
下输入 R
修改 整行
内容 r
修改 单个
字符 g~
反转大小写 gu
转换为小写 gU
转换为大写 [缩进] 在
编辑模式
下输入 >
增加缩进 <
减小缩进 =
自动缩进 [删除] 在
编辑模式
下输入 x
删除光标字符, 向后
删除 X
删除光标字符, 向前
删除 dd
删除 整行
`d [删除] 在
编辑模式
下输入 ————————— ———————————–x
删除光标字符, 向后
删除 X
删除光标字符, 向前
删除 dd
删除 整行
删除光标 后
的字符 d0
删除光标 前
的字符 dG
删除 光标至文件尾
的字符 dgg
删除 光标至文件首
的字符 n
dd
n
代表数字,代表向光标下删除多少行 [复制] 在
编辑模式
下输入 yy
复制整行 y$
复制光标 后
的字符 y0
复制光标 前
的字符 yG
复制 光标至文件尾
的字符 ygg
复制 光标至文件首
的字符 n
yy
n
代表数字,代表向光标下复制多少行 ]y
指令快速将选定的文本 复制到系统剪贴板
[粘贴] 在
编辑模式
下输入 p
后
粘贴 P
前
粘贴 ddp
剪切 整行
注:
被删除的字符会在缓存内,可以粘贴删除的字符,相当于剪切 +p
将系统剪切板粘贴, 在写入模式下快捷键: Ctrl
r
+
*p
将X11主剪切板粘贴 [恢复] 在
编辑模式
下输入 u
恢复上一次操作 Ctrl
r
重做
通过在.vimrc中进行如下设置来启用持久性撤销。
:set undofile
不过,这会在系统中为每个被编辑过的文件保留一个撤销历史记录文件,显得有些混乱。也可以将这些文件保存在同一个目录中,配置如下所示。
为所有文件设置持久性撤销
set undofile
if !isdirectory("$HOME/.vim/undodir")
call mkdir("$HOME/.vim/undodir", "p")
endif
set undodir="$HOME/.vim/undodir"
查询文件
[查找] 在
编辑模式
下输入 / 字符串
n
向下搜索, N
向上搜索 .
重复
上一次操作 *
查询相关单词, n
下一个, N
上一个 *nn
会遍历完所有的匹配项,从而跳回到本次查找的起点
可选模式
Vim的可视模式(visual mode)支持文本的任意选择(通常用于执行某些操作)。如果需要选择的文本不属于已定义的文本对象(单词、句子和段落等),则这个模式非常有用。进入可视模式有以下几种方式。
一旦进入可视模式,读者可以通过常用的移动命令来移动光标,从而扩展选择范围。
[选择文本] v
进入字符可视模式(状态栏标文本 --VISUAL--
V
进入行可视模式(状态栏标识文本 --VISUAL LINE--
Ctrl
v
组合键进入块可视模式(状态栏标识文本 --VISUAL BLOCK--
gv
重选上次高亮选区
注释
根据语法注释,这里主要是批量注释。 Ctrl
+ v
进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I
进入行首插入模式输入注释符号如 //
或 #
,输入完毕之后,按两下 ESC
,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
取消注释: Ctrl
+ v
进入块选择模式,选中你要删除的行首的注释符号,注意 //
要选中两个,选好之后按 d
即可删除注释, ESC
保存退出。
输入模式
[移动] 在输入模式操作 h
左移一列 l
右移一列 j
下移一列 k
上移一列
命令模式
[行号] 命令模式下输入 全称 set nu set number 打开行号 set nonu set nonumber 关闭行号
颜色
可以尝试其中一种配色主题,方法是输入:colorscheme,然后按Enter键;也可以在所有可用的配色主题之间循环切换,方法是输入:colorscheme,然后输入一个空格,并多次按Tab键。第7章中有更多关于Vim的配置和配色的介绍,届时读者可以拥有完全属于自己的Vim。
Vim 8自带如下主题配色。
[颜色] 命令模式下输入 blue darkblue default delek desert elflord evening industry koehler morning murhpy pablo peachpuff ron shine slate torte zellner
折叠
需要在.vimrc文件中将foldmethod设置为indent,设置代码如下。
set foldmethod=indent
不要忘记重新加载 ~/.vimrc
,方法是重启Vim或在Vim中执行 :source $MYVIMRC
命令。将foldmethod设置为自动类型(如indent)会默认将所有文件折叠。
输入 za
可切换折叠状态(打开关闭的折叠或关闭打开的折叠)。输入 zR
和 zM
分别用于同时打开和关闭所有折叠。
设置折叠方式的方法为在 .vimrc
文件中加入 set foldmethod=<折叠方法><!--折叠方法-->
。
- manual:手动折叠,这种方法对于长文本而言并不适用。
- indent:基于缩进的折叠,这对于依赖缩进的编程语言非常合适(不管哪种语言,标准的编码风格中总是会采用某种一致性的缩进。因此,当读者想要快速隐藏不关心的代码时,indent折叠方式不失为一种高效率的选择)。
- expr:基于正则表达式的折叠。如果读者想要用复杂的规则来定义折叠,那么可以选择这种方式。
- marker:使用文本中特殊的标记来定义折叠,比如{{{和}}}。这种方法对于管理很长的.vimrc文件非常有效,但是在Vim之外不常用,因为这种方式需要修改文件内容。
- syntax提供了可识别语法的折叠,但它并非对所有语言都开箱即用(不支持Python)。
- diff:当Vim处于diff模式时会自动采用这种折叠方式,diff模式下需要展示两个文件的不同之处,而相同之处往往需要隐藏起来
替换
: 1,$s/word1/word2/gc
或 : %s/word1/word2/gc
从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!,如果将命令后的c不写,则不需要用户确认。
打开
编辑一个目录时(如用 :e .
命令打开当前目录),实际上打开的是 Netrw
。
通过Netrw,读者可以在工作区中看到所有的文件。虽然Netrw已经在顶部的状态栏中列出了几个常用的快捷键,但是下面的几个主要功能键还是需要了解一下。
命令 说明 Enter
用于打开文件和目录 -
进入上一层目录 D
删除一个文件或目录 R
重命名一个文件或目录 : edit .
打开文件管理,并显示当前目录,可缩写 : e .
: Explore
打开文件管理,并显示活动缓冲区所在的目录
Netrw的窗口也可以在分割窗口或标签页中打开。
命令 说明 : Vex
以左右分割方式打开Netrw : Sex
以上下分割方式打开Netrw : Lex
以左右分割方式打开Netrw,当前Netrw窗口位于最左边,且高度占满整个屏幕 %
表示该缓冲区位于当前窗口中 a
表示该缓冲区处于活动状态,即它已被加载并可见 line 30
表示当前光标位置 : b 1
返还指定缓存文件。命令中的空格可以省略,得到简化版的命令:b1 1
为缓冲区编号,在整个Vim会话中,它的值保持不变 2
保存 3
退出 4
缓存区文件 5
多文件 6
组合文件 7
比较文件 8
资源管理器 "xxxxx"
“xxxx”为文件名
分屏
使用如下命令将窗口分割成两个,其中一个显示新的文件。
命令 说明 : split
file 上下分割, split命令可以简化为 : sp
. 或者快捷键: Crtl
w
s
: vsplit
file 左右分割, :vs
是:vsplit的简化版. 或者快捷键: Crtl
w
v
切换
为了使光标能在不同窗口间移动,先按 Ctrl
+ w
组合键,然后输入一个方向键: h
、 j
、 k
、 l
中的一个或键盘方向键。
移动
窗口命令的快捷键都要先按 Ctrl
+ w
组合键,后面跟一个大写的方向键( H
、 J
、 K
和 L
中的一个),当前窗口会被移动到相应的位置。
命令 说明 Ctrl
w
w
组合键 在窗口之间 循环切换
Ctrl
w
H
组合键 将当前窗口 移动
到屏幕的 最左边
Ctrl
w
J
组合键 将当前窗口 移动
到屏幕的 底部
Ctrl
w
K
组合键 将当前窗口 移动
到屏幕的 顶部
Ctrl
w
L
组合键 将当前窗口 移动
到屏幕的 最右边
Ctrl
w
=
组合键 使所有窗口 等宽
等高
Ctrl
w
_
组合键 最大化活动窗口的 高度
Ctrl
w
,组合键
N
Ctrl
w
_
组合键 把活动窗口的高度设为 N
N
Ctrl
w
,组合键
使用 Ctrl
+ w
, r
组合键将当前行或当前列(行优先于列)中的每个窗口的内容向右或向下移动。使用 Ctrl
+ w
, R
组合键则以相反的方向执行类似的操作。
· 使用 Ctrl
+ w
, x
组合键将当前窗口与下一个窗口的内容交换(如果当前窗口是最后一个,则与前一个交换)。
关闭
- 使用
Ctrl
+w
,q
组合键关闭当前窗口。 - 使用
: q
命令关闭窗口并卸载缓冲区;不过,当只有一个窗口打开的时候,这会导致退出Vim。 - 使用
Ctrl
+w
,c
组合键关闭活动窗口 - 使用
: bd
命令删除当前缓冲区,并关闭当前窗口。 - 使用
Ctrl
+w
,o
合键(或: only
,或: on
命令)关闭除当前窗口之外的所有窗口。 - 当打开了多个窗口时,可通过
: qa
命令关闭所有窗口并退出。也可以结合: w
命令,即: wqa
,它会先保存所有打开的文件,再退出Vim。
终端
进入终端模式的命令如下。
进入终端模式的命令如下 : terminal
: terminal
命令可简化为 : term
在Shell中执行程序 :! ls
ls
是shell自带的程序,再按Enter键返回 :shell
进入shell, exit
返回, 或者 Ctrl
d
批量修改
:%s/AAA/BBB/g # 批量将AAA转换为 BBB
管理员写入
是不是经常会忘了使用sudo命令而重新配置文件, 而这个方法就是专门处理这个问题的.
:w !sudo tee % > /dev/null
tee
程序将以 sudo
权限运行,也就是说它拥有写/etc/hosts 文件的权限,在 Vim 命令行中,% 符号具有特殊含义。它会展开成当前文件的完整路径.
:tee/你的文件 > /dev/null
这条命令会把缓冲区的内容当作标准输入,并用它来覆盖 _你的文件_的内容。
批量插入
Ctrl
+v
,jj$
A
;
Esc
常用命令
packloadall 加载所有插件 silent! helptags ALL 为所有插件加载帮助文档 syntax on 支持语法高亮显示 filetype plugin indent on 启用根据文件类型自动缩进 set autoindent 开始新行时处理缩进 set expandtab 将制表符Tab展开为空格,这对于Python尤其有用 set tabstop=4 要计算的空格数 set shiftwidth=4 用于自动缩进的空格数 set backspace=2 在多数终端上修正退格键Backspace的行为 colorscheme murphy 修改配色 set nocompatible 与Vi不兼容 syntax on 语法高亮 set autoindent 沿用上一行缩进 set autoread 从磁盘自动重载文件 set backspace=indent,eol,start 现代编辑器的退格键行为 set belloff=all 禁用错误报警声 set cscopeverbose 详细输出cscope结果 set complete-=i 补全时,不要对当前被包含的文件进行扫描 set display=lastline,msgsep 显示更多消息文本 set encoding=utf-8 设置默认编码 set fillchars=vert:|,fold: 分隔字符 set formatoptions=tcqj 更直观的自动格式化 set fsync 调用fsync()实现更健壮的文件保存 set history=10000 最大的历史记录数 set hlsearch 搜索结果高亮显示 set incsearch 搜索时边输入边搜索、并移动光标 set langnoremap 避免出现映射崩溃的情况 set laststatus=2 总是显示状态栏 set listchars=tab:>\ ,trail:-,nbsp:+ :list时一些特殊字符的显示 set nrformats=bin,hex 对和的支持 set ruler 在状态栏角落里显示当前行位置信息 set sessionoptions-=options 不同会话不共享选项 set shortmess=F 文件信息少显示一些 set showcmd 在状态栏中显示最后一条命令 set viminfo+=! 为多个会话保存全局变量 set sessionoptions-=options 不同会话不共享选项 set tabpagemax=50 -p选项能够打开的最大数目的标签页 set tags=./tags;,tags 用于搜索标签的那些文件名 set ttimeoutlen=50 按键序列中等待下一个的时间,单位为毫秒 set ttyfast 要求实现快速的终端连接 set wildmenu 增强命令行补全功能
按键
命令的重映射。
Vim支持将某些键映射为其他键,:map和:noremap提供了这样的功能。
- :map 用于递归映射。
- :noremap 用于非递归映射。
- :nmap和:nnoremap用于编辑模式。
- :vmap和:vnoremap用于可视和选择模式。
- :xmap和:xnoremap用于可视模式。
- :smap和:snoremap用于选择模式。
- :omap和:onoremap用于操作待决模式。
- :map!和:noremap!用于写入和命令行模式。
- :imap和:inoremap用于写入模式。
- :cmap和:cnoremap用于命令行模式。
这意味着经:map重映射的命令可以识别自定义映射,而:noremap则针对系统默认映射。
决定创建一个新映射时,最好先确认一下此键或按键序列是否已经被映射为其他用途了。内置的按键绑定列表可通过:help index命令查看。而:map命令则可以查看插件和读者自定义的映射。比如,:map g将显示所有以g键开头的映射。
比如,在.vimrc文件中将按如下方式自定义映射。
如果想显式移除自定义或插件定义的映射,可使用:unmap命令。还有一个重要选项是:mapclear,它会将读者定义的映射和默认映射都清除掉。
你还可以在映射中使用特殊字符和命令,比如下列代码。
“noremap < C
–u
> :w ” 使用< Ctrl
–u
>来保存文件(u表示更新)
上述例子中,表示 Ctrl
+ u
组合键。Vim中的 Ctrl
修饰符表示为,其中为某个字符。其他修饰符键也用类似的方式表示。
· 或表示 Alt
键加上某个键,比如表示 Alt
+ b
组合键。
·
注意,命令后面接表示回车( Enter
键)。如果没有按Enter键,则命令虽然输入了,却不会被执行,读者会停留在命令行模式下(除非读者希望如此)。
另外,这里还列出一些可能用得上的特殊字符。
- 表示空格。
- 表示Esc键。
- 和表示Enter键。
- 表示制表符Tab键。
- bs表示退格键。
- 、、和表示箭头键。
- 、表示上下翻页键。
- ~表示12个功能键。
- 、、和分别表示Home、Insert、Delete和End键。
你还可以将一个键映射为(无操作 no operation的缩写),表示这个键不起任何作用。有时候,读者希望习惯使用 hjkl风格的光标移动方式,而禁止自己使用箭头键,这个映射此时会派上用场。读者可以在 .vimrc中加入如下配置。
禁止箭头键功能,使自己习惯hjkl风格
- map
- map
- map
- *map
插图






相关连接
Vimhelp_txt.pdf 提取码:GnTt
Original: https://www.cnblogs.com/xs-xs/p/16329125.html
Author: edolf
Title: Vim 常规教程
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582652/
转载文章受原作者版权保护。转载请注明原作者出处!