贡献者: addis
vi
就是 vim
, 打开的都是 vim 程序.
vimtutor
进入基础教程
ctrl+u
向上翻半页,ctrl+d
向下翻半页,ctrl+b
上一页,ctrl+f
下一页
:w
保存,:wq
保存并退出,:w /<path>/<file>
另存.
u
, 重做: Ctrl+r
dd
剪切一行,p
粘贴。
G
可以跳到文档最后,gg
可以跳到文件开始
y
(yank), 剪切: d
(delete)
Ctrl+D
可以查看所有候选的补全
hjkl
按键可以上下左右移动,不需要方向键(好远)
w
可以跳到下一个单词,比 l
要快
b
跳到上一个单词,比 h
要快
e
跳到下个单词末尾
0
使光标跳到行首
^
跳到第一个不为空格/tab 的字母
$
跳到行末
ctrl+e
将窗口向下移动一行,ctrl+y
向上移动一行
ctrl+]
可以进入一个 tag,相当于点击链接,用 ctrl+o 返回
123G
跳到第 123 行
:<number>
也可以直接跳到指定的行
$
跳到行末
A
跳到行末并编辑
``
可以让光标回到上一个位置, ''
让光标回到上一个位置的行首。连续按多次将在两个位置间跳转
" insert mode 快捷键
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
" command mode 快捷键
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>
z+回车
用于将当前行移动到屏幕顶部,zz
移动到中间
H
让光标跳到屏幕第一行行首,L
跳到最后一行行首,M
跳到中间
(
和 )
把光标移动到上一句或者下一句。下一句。下一句。下一句。
{
和 }
把光标移动到上一段或者下一段
i
直接编辑
x
键删除光标处的字符
dw
可以删除当前字符到单词 d
开启 delete 模式,w
跳到下一个单词行首
d$
可以删除当前字符到行末
dw
, d$
这样的操作叫做 operator + motion
100w
,d3w
(删除三个字)
dd
删除一行,3dd
删除三行
ctrl+U
可以删除光标左边的内容
f
加一个字符可以跳到同一行内下一个出现该字符的位置(话说为什么不直接用 /
)
set mouse=a
可以使用鼠标!
:help 内容
可以进入帮助页面
esc
进入 normal mode
u
撤销, ctrl+R 重做,10u
撤销 10 次。注意每次撤销一个命令,一次插入很多单词也算一个命令,10x
也算一个命令
U
用于撤销改行的所有修改
p
(put)用于把 dd
删除的行插入到光标下方,可以多次粘贴,可以 5p
r
(replace)可以替换光标处的单个字符,例如 ra
替换为 a
,3ra
连续三个字符替换为 a
c
(change)相当于 d
再 a
ctrl+G
查看当前的位置和文件状态
%
可以找到对应的另一半括号 (), [],
v
, 选择行: V
, 选择块: ctrl+v
.
v
粘贴(光标右侧): p
, 粘贴(光标左侧): P
dd
(事实上是剪切!)
V
或, 粘贴(光标下一行下移): p
, 粘贴(光标所在行下移): P
ggVG
即可
/
, 用 \/
即可,可能的转义的字符都用 \
试试就行
/ *<string>*
会向下搜索文档中所有包含 string
的位置, 如果再按 n
, 会搜索下一处.
/pattern
,向上搜索 ?pattern
,下一个 n
,上一个 N
.
:noh
可以取消搜索匹配的高亮(如果有设置)
q/
可以打开新窗口编辑搜索历史,用回车执行,按两次 ctrl+c
关闭
/搜索词\c
,区分大小写 /搜索词\C
:set ignorecase
,不设置则默认区分。
*
可以搜索当前光标下的单词
esc
返回 Normal mode
q:
打开一个窗口编辑历史命令,用回车执行,按两次 ctrl+c
关闭
命令模式下,ctrl+r
快捷键可以插入许多内容。ctrl+r %
可以插入当前文件名(含相对目录)
:help usr_08.txt
:split
将当前窗口复制一份,选中上方窗口
:10split
指定新增窗口行数
:split [file]
在新窗口打开文件
:only
关闭其他所有窗口
:new
创建新文件,在新窗口打开
ctrl+w w
切换窗口,ctrl+w ctrl+w
也一样(ctrl 按着连按两个 w)
ctrl+w
以后,ctrl
都可以一直按着也没关系,例如 ctrl+w
后 ctrl
不松手连续按 wj, wk
ctrl+w +
或 ctrl+w -
用于调整窗口大小,例如 10ctrl+w -
10 ctrl+w _
指定大小为 10 行
:q
仅退出当前窗口,:qa
退出所有窗口
:vsplit
可以让窗口左右划分
:vnew
可以就是左右划分的 new
ctrl+w
后加上 hjkl
可以切换到指定方向的窗口
ctrl+w
后加上 t
或者 b
可以跳到最上方和最下方的窗口
vim -o 1.txt 2.txt 3.txt
可以每个文件开一个窗口
:tabnew
新建一个 tab
:tabf 文件名
新建一个 tab 用于打开某文件
q
退出当前 tab
:tabn
和 :tabp
用于切换到后一个/前一个 tab
set ts=4
:pwd
查看
:cd
可以更改当前目录
find: **/文件名
可以搜索当前目录和子目录下的文件名并打开(但如果有太多 match 就会出错)
:source ~/.vimrc
就可以生效,不需要重启 vim
:e <filename>
打开文件.
gd
跳到光标所在变量的声明处, 其实是搜索最早出现的地方.
:edit
命令可以刷新
file -bi <filename>
命令可以检测文件的 encoding,注意 UTF8 文件首位要有 BOM (Byte Order Mark) 该命令才能检测到 UTF8。
:set bomb
才行, BOM 有时候会产生一些问题,例如 gcc (GNU compiler collection) 不接受 BOM, 又例如 cat 两个文件的时候第二个文件的 BOM 也会复制到第一个文件的结尾.
:set fileencoding
.
:set number
. 要隐藏,用 :set nonumber
. 如果要默认显示行号,在 ~/.vimrc
文件中输入 set number
即可
?
可以查看简单的说明
u
可以将 root 移动到上一层
U
相当于 u
但是保持打开的子目录
C
将选中的目录作为 root
q
退出