Tip
- 使用 CTRL-[ 代替
,左手小指 CTRL,右手小指 [ 熟练后很方便 - SecureCRT 中使用 Vim 8 内嵌终端如看到奇怪字符,使用 :set t_RS= t_SH= 解决
- SecureCRT 中使用 NeoVim 如看到奇怪字符,使用 :set guicursor= 解决
- * 和 # (以及 g*/g#)是十分重要的查找命令
- 多使用 ciw, ci[, ci", ci( 以及 diw, di[, di", di( 命令来快速改写/删除文本
- 使用 @: 重复执行上一次 Ex 命令,比如 :nohl
, @:, @:, @: - SHIFT 相当于移动加速键, w b e 移动光标很慢,但是 W B E 走的很快
- 移动到行首非空字符时用 0w 命令比 ^ 命令更容易输入
- 在空白行使用 dip 命令可以删除所有临近的空白行
- 在空白区使用 viw 可以选择所有空白字符
- 缩进时使用 >8j >} <ap =i} == 会方便很多
- 越重复的工作,越需要努力的将其自动化
- 编程时可以使用 [{ 和 ]} 快速在函数间移动
- 插入模式下,当你发现一个单词写错了,应该多用 CTRL-W 这比
快 - 插入模式下,CTRL-X CTRL-F 可以方便的补全当前目录的文件名
- 插入模式下,可用 CTRL-V u 输入 unicode,如
u1234 输入16进制 unicoode - 插入模式下,CTRL-R = 可以用来简单计算,比如
=12*3.5/10 会插入 4.2 - 如果在插入模式下移动光标,那么就不能使用 . 来重复之前的插入了
- y d c 命令可以很好结合 f t 和 /X 比如 dt) 和 y/end
- c d x 命令会自动填充寄存器 "1 到 "9 , y 命令会自动填充 "0 寄存器
- 用 v 命令选择文本时,可以用 o 掉头选择,有时很有用
- ca) 和 yi} 很容易记忆,但是他们等同于 cab yiB 后者很容易输入
- 写文章时,可以写一段代码块,然后选中后执行 :!python 代码块就会被替换成结果
- 搜索后经常使用 :nohl 来消除高亮,使用很频繁,可以 map 到
上 - 搜索时可以用 CTRL-R CTRL-W 插入光标下的单词
- Vim 有一千零一种移动光标的方法,有时候就连 H M L 也是很有用的
- 不需要记忆上一次选择区域,'< 和 '> 可以跳到上次选择的开始和结束
- 如需编辑同一个文件的不同地方,可以用 :vs 或者 :split 将文件分为两个窗口
- 有六种方法来改变一个布尔设置: :set list nolist list! invlist list? list&
- 映射按键时,应该默认使用 noremap ,只有特别需要的时候使用 map
- 当你觉得做某事很低效时,你应该停下来,u u u u 然后思考正确的高效方式来完成
- 用 y复制文本后,命令模式中 CTRL-R 然后按双引号 " 可以插入之前复制内容
- 如果你想全屏阅读帮助的话,使用 :tab help
命令 - 粘贴文本时应该思考下前后是否包含空格
- :x 和 ZZ 命令和 :wq 类似,但是不会写入没有改变的文件,并且更快
- 多阅读 :h index 学习新的快捷键,让你更加高效
- Vim 帮助系统里有一个使用技巧集合,使用 :h tips 阅读
- Windows 下的 GVim 可以用 CTRL-INSERT 和 SHIFT-INSERT 操作系统剪贴板
- 思考题:知道下面控制代码 ^I ^M ^J ^[ ^H ^@ 分别代表什么意思么?
快捷键
-
C-o
: Insert -> Insert Normal Mode -
C-[
Normal Mode;
Visual Mode
-
gv
Reselect the last visual selection -
o
Go to other end of highlighted text
窗口管理
窗口
窗口划分C-w
: s
v
屏幕分割;
窗口移动C-w
: w
在窗口间进行移动;h/j/k/l
焦点移动HJKL
位置移动
窗口关闭C-w
: c
:clo
关闭激活的窗口;o
:on
只保留当前窗口
窗口大小: C-w =
使窗口等大
标签页
建立
:tabe {file}
在新标签页中打开文件;:tabc
关闭标签页;:tabo
只保留当前标签页;C-w T
将当前窗口移动到新标签页中。
切换
:tabn
g t
切换到下一个标签页;:tabp
g T
切换到上一个标签页;
重新排列
:tabmove [N]
将当前标签页移动到第 N 个;如果省略 N, 则移动到最后
Buffer
Buffer 列表
:ls
列出当前激活的 buffer, 其符号含义如下
- % 表示该 buffer 在当前窗口中;# 表示该 buffer 可用通过
C-^
:e #
切换。 - a 已加载并可看见的 buffer; h 已加载但不可见的 hidden buffer
- + 已修改的 buffer
Buffer 切换
-
<C-^
在当前文件和备选文件间切换; -
:bn
:bp
:bf
:bl
next/prev/first/last -
:b N/name
跳转到指定的 buffer -
:sb
adds
to split -
:bdelete N1 N2 N3
删除 buffer N1 N2 N3;:N,M bdelete
删除第 N 个到第 M 个之间的 buffer.
模式
正常模式 (Normal mode)
移动
- 词间移动:单词开头
w
b
; 单词结尾e
ge
; 使用大写字符跳过标点。 - 行间移动:
0
^
$
; 使用g
前缀作用于 visual line。 - 文章移动:
^b
^f
翻页;{
}
段落跳转 - 行跳转:
gg
G
10G
f
t
F
T
搜索移动;
,
重复
操作
C
c$
: 删除当前位置到行尾的内容 => Insert Modes
S
: 替换当前字符或当前行 => Insert ModeR
r
gR
gr
: 替换模式;使用g
可将 TAB 当成空格。g~
gu
gU
: 切换大小写
在以上操作中,c
d
y
是“及物动词”, 也就是需要加上操作对象。
cc
dd
yy
作用与整行
命令
!
: Filter {motion} lines through an external program*
: Search for each occurrence
帮助
:help w
:help c_CTRL-D
:help insert-index
:help user-manual
跳转
-
/
?
搜索;n
N
跳转 -
C-o
C-I
回到之前的位置(后退); 回到之后的位置(前进) -
%
在匹配的括号间跳转
替换
:[range]s/old/new
只替换每行出现的第一个:[range]s/old/new/g
全局替换:[range]s/old/new/gc
替换前确认
快捷键
C-o
回到之前光标在的位置;C-g
Echoes the name and status of the current file
Insert Mode
C-h
C-w
C-u
:删除操作
Visual Mode
C-g
Switch between VISUAL and SELECT mode
自定义快捷键
-
map
noremap
适用于 normal, visial, operator-pending -
nmap
nnoremap
适用与 normal; -
xmap
xnoremap
适用于 visual; -
cmap
cnoremap
适用于 command-line; -
omap
onoremap
适用于 operator-pending -
imap
inoremap
适用于 insert1 2
:nmap <space> :echo "foo"<cr> "为空格键定义映射 :nunmap <space> "取消空格键的映射
Command mode
补全:Ctrl-D
执行 Shell 命令
:!command
执行 shell 命令:!rm FILENAME
移除文件v motion :w FILENAME
将选中的内容写入到文件中:w FILENAME
将所有内容写入到文件中:r FILENAME
将文件内容写入当前 buffer 中:r !ls
将 shell 命令的返回结果写入文件中- 复制粘贴:写入剪切板
:w !pbcopy
:%w !pbcopy
读取剪切板:r !pbpaste
地址和范围
使用:star, end
的方式指定:[range]
. 其地址的声明如下:
-
0
1
$
.
: 第 0 行、第 1 行、最后一行、当前行。 -
'm
: Line containing mark m -
:%
: 指代整个文件,:1,$
的缩写
复制和移动:
复制命令为copy
,可缩写为co
t
;移动命令为move
, 可缩写为m
|
|
Register:
:[range]delete [x]
删除;:[range]yank [x]
复制;:[line]put [x]
粘贴;:[range]join
合并:[range]normal {commands}
:Execute Normal mode {commands}:[range]global/{pattern}/[cmd]
:Execute the Ex command [cmd] on all specified lines where the {pattern} matches- 注册区域
⌃r0
paste the text that just yanked.⌃r=
Use expression register do simple arithmetic
替换:
替换命令为:[range]s[ubstitute]/{pattern}/{string}/[flags]
, 它将符合{pattern}的内容替换为{string}. 该操作逐行展开。
|
|
Untidied
Shortcut
-
<C-d>
: Reveal a list of possible completions -
<Tab>
: Autocomplete commands -
<C-r><C-w>
: Copy the word under the cursor and inserts it at the command-line prompt -
q:
: Open the command-line window with history of Ex commands -
q/
: Open the command-line window with history of searches -
ctrl-f
: Switch from Command-Line mode to the command-line window
Excute shell command
:!{cmd}
: Execute {cmd} with the shell- :!bash % : Execute current bash file. % symbol is shorthand for the current file name.
:read !{cmd}
: Execute {cmd} in the shell and insert its standard output below the cursor- :[range]write !{cmd} : Execute {cmd} in the shell with [range] lines as standard input
:[range]!{filter}
: Filter the specified [range] through external program {filter}. !{motion} operator command drop us into Command-Line mode and prepopulates the [range] with the lines covered by the specified {motion}
Files
- Buffer :
:args
:- :next/prev : traverse the files in the argument list
:argdo
: execute the same command on each buffer in the set. The [] characters indicate which of the files in the argument list is activate:bufdo
: Execute an Ex command in all of the buffers listed by:ls
工作目录
:set path+={p}
将{p}添加到工作路径;:set path+={p}/**
将所有子目录也添加到路径中;:set path-={p}
将{p}从工作路径移除;:e {path}
: 打开该路径的 explorer;e .
:E
打开当前路径的 explorer; 打开当前文件所在路径的 explorer.Sexplore
Vexplore
在水平竖直方向切分,打开 explorer.:edit %
打开当前文件;:edit %:h
打开当前文件的路径;h
修饰符去掉文件名。
Find file | |
---|---|
:find {filename} | Look up {filename} in path File explorer |
Command in Explorer | |
---|---|
- | Open the parent directory. |
% | Open a new file (:h netrw-%) |
d | Make a new directory (:h netrw-d) |
R | Rename the file/directory under cursor |
D | Delete/Remove files and directories under cursor |
Save file : To save a file with nonexistent directories, calling the external mkdir
program by !mkdir -p %:h
Config
|
|
Vim Practical
-
Tips 60
-
Tips 61
-
Tips 62
-
Tips 63
- Register:
+
剪贴板 寄存器"
Unnamed 最近一次的复制或删除操作 (d
,c
,s
,x
,y
)0
最近一次复制;
- 用
m{char}
添加标记; ``{char}` 跳转到标记 :source $MYVIMRC
reload config
|
|