打开及保存
命令
:set nu
– 显示行号:pwd
-> print working directory 显示当前工作目录:edit
-> 编辑文件,可用Tab键进行智能补全%
-> 表示当前缓冲区的完整文件路径:h
-> 可以去除路径中的文件名,所以%:h
表示当前缓冲区路径:find
-> 查找命令,仅查找vim的Path下的文件,可用path选项指定(:h path
):set path+=app/**
若想让app/下的文件容易找到.
-> 代表当前工作目录:edit .
-> :e. 打开当前文件路径的管理器:Explore
-> :E 打开文件管理器:!xxxxx
-> 执行外部命令
技巧
- 当前文件包含新文件夹路径,不能直接保存:
:!mkdir -p %:h :w
- 当前文件只读或权限不够
:w !sudo tee % > /dev/null
寄存器操作
Win意义下的Ctrl-c
和Ctrl-v
操作的是系统剪切板,即寄存器 +
,
在vim中的复制y
,粘贴p
默认操作的是寄存器 0
,因此:
Ctrl-c
<—> 命令模式下用"+y
Ctrl-v
<—> 命令模式下用"+p
插入模式下用<Ctrl-r>'+'
也就是说要引用某一寄存器在命令模式下用"{寄存器}p
,在插入模式下用<Ctrl-r>{寄存器}
另外 P
表示向前粘贴。
特殊寄存器
""
- 无名寄存器,即使用dcsxyp操作的寄存器"0
- 复制专用寄存器,y专用"_
- 黑洞寄存器,彻底清除内容"+
- 系统剪切板, 在普通模式下使用 “+p 在插入模式下用+ 实现粘贴 "*
- 主剪切板 X11 系统专用"=
- 表达式寄存器,该寄存器内容会实现计算
特定寄存器
"%
- 当前文件名"#
- 轮换文件名".
- 上次插入的文本":
- 上次执行的Ex命令"/
- 上次查找的模式
跳转
<C-i>/<C-o>
– 前进/后退,注意:<C-i>
和Tab
效果相同[count]G
– 跳转到指定行G
– 跳转到最后一行gg
– 跳转到第一行<C+f>
– 屏幕『向下』移动一页,相当于 [Page Down
]按键<C+b>
– 屏幕『向上』移动一页,相当于 [Page Up
] 按键<C+u>
– 屏幕『向上』移动半页,常用<C+d>
– 屏幕『向下』移动半页,常用<C+e>
– 屏幕『向下』移动一行<C+y>
– 屏幕『向上』移动一行+
– 光标移动到非空格符的下一列-
– 光标移动到非空格符的上一列n<space>
那个 n 表示『数字』,按下数字后再按空格键, 光标会向右移动这一行的 n 个字符。例如20<space>
则光标会向后面移动20
个字符距离。n<Enter>
n 为数字。光标向下移动 n 行(常用)0
或Home
这是数字『0
』:移动到这一行的最前面字符处 (常用)$
或End
移动到这一行的最后面字符处(常用)/pattern
/?pattern
n N –跳转到下/上一个模式出现处%
– 跳转到匹配的括号所在处(/)
– 跳转到上一句/下一句的开头{/}
– 跳转到上一段/下一段的开头H/M/L
– 跳转到屏幕的最上方/中间/最下方gf
– 跳转到光标下的文件名<C-]>
– 跳转到光标下关键字定义处- ‘{mark} / `{mark} – 跳转到一个位置标记
u<C-r>
– 最终将光标跳转到上次修改过的地方:changes
– 显示当前文件的改变历史列表g;
/g,
– 正向或反向遍历改变列表
特殊标记位置
- ` - 当前文件中上次跳转动作之前的位置
.
- 上次修改的地方^
- 上次插入的地方
其他
gf
命令跳转到指定文件时需要设置:
- 在
suffixesadd
变量下添加相应的文件后缀名 - 在
path
变量下添加路径
在设定标记时小写标记只在当前有效,大写标记全局有效。 如: ma
mA
范围
[range] 范围描述->{起始行},{终止行}
- 符号
.
代表当前行; - 符号
0
代表文件第0行,并不存在; - 符号
1
代表文件第1行; - 符号
$
代表末行; - 符号
%
代表当前文件所有行 - 符号 ‘‘m’ 代表包含位置标记m的行
-
符号
[:'<,'>]
,代表高亮选区行 -
另外:模式指定范围指的是字符串可以代替{起始行}及{终止行}, 例如
[:/<html>,/<\/html>/p
会选中以<html>
开头到</html>
的区域.而且可以接受+-
的偏移 -
@:
重复Ex命令 :[range]delete [x]
- 删除指定范围行内容到寄存器x:[range]yank [x]
-:[line] put [x]
-:[range]copy {address}
- 将指定范围行复制到{address}
行下 –> 简称为:[range]t {address}
:[range]m[ove] {address}
- 将指定范围行移动到{address}
行下:[range]join
- 将指定范围行连接:[range]normal {commands}
- 对指定范围每行执行命令{commands}
:[range]s[ubstitute]/{pattern}/{string}/[flags]
- 将指定范围行内出现{pattern}
的地方替换为{string}
:[range]global/{pattern}/[cmd]
- 对指定范围内匹配{pattern}
的行执行Ex
命令[cmd]
:[range]p[rint]
- 在命令行下回显指定范围-
:q[uite]
-退出 :!shell
- 启动交互shell会话,用exit回到vim:!{cmd}
- 执行外部命令:read !{cmd}
- 执行并将标准输出插入到光标下方:[range]write !{cmd}
- 执行并将指定范围作为输入:[range]!{cmd}
- 将指定范围内容输入cmd,将输出替换掉指定范围,即用cmd来过滤指定范围内容
python调试的技巧,使用命令
:w[rite] | !python %
排序当前文件
:%!sort [-t','] [-k2]
– 其中 -t’,’ 表示用’,’作为分隔符, -k2 表示对第二列排序
其他
q/
- 打开查找命令历史的命令行窗口q:
- 打开Ex命令历史的命令行窗口<C-f>
从命令行模式切换到命令行窗口
补充:在bash shell中可以用<C-z>
挂起当前作业,用$jobs
查看当前挂起,用fg
唤醒挂起的作业
查找替换
查找
…..
替换:
:s[ubstitute]
- 先查找一段文本然后用另一段文本替换掉。
:[range]s[ubstitute]/{pattern}/{string}/{flags}
flags:
g
- 全局范围(当前整行范围)c
- 对每一次替换进行确认n
- no不进行替换行为
替换中的特殊字符:
\r
- 换行符\t
- 制表符\\
- 反斜杠\1
- 第1个匹配 1-9\0
- 插入匹配模式的所有内容&
- 上一次的替换标记~
- 上一次调用使用的{string}
\={Vim script}
- 执行{Vim script}
表达式并将返回结果作为替换<C-r>{regist}
- 插入指定寄存器内容- 在Vim脚本中可用
@{register}
来引用寄存器内容 - Vim中可用
:let @{}
来给寄存器赋值
其他
特殊符号:
[Esc]
退出到普通模式,与 [Ctrl]+'['
功能相同
n+
向前(下)移动n行
n-
向后(上)移动n行
.
- 重复上一次的动作
;
- 重复ftFT
,
- 回退ftFT
&
- 重复替换,用u回退例如”:s/target/replacement”
@x
- 重复一系列修改用u回退,例如”qx{changes}q”
*
- 移动到光标所在单词的下一个出现位置
>
- 增加缩进(指定行),或用G表示所有行
<
- 减小缩进
=
- 自动缩进
!
- 用外部程序过滤指定行
(
- 移至上一个或当前代码块的起始字符处
)
- 移至下一个代码块的起始字符处
{
- 移至上一个或当前代码块前紧跟的空白行
}
- 移至下一个或当前代码块后紧跟的空白行
/
- 向前搜索,用Nn重复
?
- 向后搜索,用Nn重复
0
- 数字0,移动到本行的0位置,即行首
$
- 行尾
动作:小写字母
a
- append 追加
b
- back begin of word 上一个单词的起始
c
- change 改变
d
- delete 删除
e
- end of word 到下一个单词的结尾,w是到下一个单词的起始
f
- find 查找(本行),用’;’来重复、’,’来回退
g
- ? –>ge 移动到上一个单词的结尾,gE移动光标到上一个字串的结尾,g~反转大小写,gu转为小写,gU转为大写。
h
- ← 向左移动
i
- insert 插入
j
- ↓ 向下移动 同[Ctrl]+’n’ Next Line
k
- ↑ 向上移动 同[Ctrl]+’p’ Previous Line
l
- → 向右移动
m
- ?
n
- next 下一个搜索匹配项
o
- other line 在当前行下另开一空行,并进入编辑模式
p
- pause 粘帖
q
- ? –>q/ 和 q? 命令,在窗口最下面打开一个查找历史记录窗口
r
- replace 替换(单个字符)
s
- substitute 删除当前字符或指定字符数后进入插入模式
t
- to 到字符*面前,用’;’来重复、’,’来回退
u
- undo 撤消
v
- visual 可视(选择)模式
w
- word 到下一个单词的起始,e是到下一个单词的结尾
x
- x 剪切右边的,因为它长得像个叉
y
- yank 复制
z
- ?–>把光标所在行移动窗口的顶端、中间或底部:zt、zz、zb
名词:
w
- word 单词 如’d2w’表示删除2个单词,注意’.’也是一个单词
l
- letter 字符 如’d2l’表示删除2个字符
p
- paragraph 段落
动词:
A
- Append to Line 添加到行尾
B
- Back Begin of words 移动光标到上一字串起始
C
- Change Line 改变,重写当前行,与cc不同在于C会保持缩进,而cc会退到0位置。
D
- Delete Line 删除当前行,与dd的不同在于,dd是逻辑上删除,即后面的行会跟进使得看起来连贯,D是形式上的删除,后面的行不会跟进看起来会有个’坑’,但不会改变后面代码的行号。
E
- End Words 移动到下一字串的结尾。
F
- Find 行内查找上一个指定字符。用’;’来重复、’,’来回退
G
- Go End Of File 到当前文件的底部。可以指定行号,例如:”nG”表示光标移动到第n行
H
- Hight of Window 到当前窗口的第一行,gg则是到当前文件的第一行。
I
- Insert 在当前行首插入
J
- Jion Line 连接当前行与下一行
K
- ?
L
- Low of Window 到当前窗口最后一行,HML是一组
M
- Middle of window 到当前窗口中间行,HML是一组
N
- Next 是next的反向,上一个搜索匹配项。
O
- Other 新起一行,只不过在当前行上方,与o反向
P
- Pause 粘帖,与p反向(粘帖到左边)
Q
- Quit 进入EX:模式
R
- Replace 连续替换模式,i只是替换一个字符
S
- Substitute 删除当前行或指定的行数后进入插入模式
T
- 行内查找上一个指定字符。用’;’来重复、’,’来回退
U
- Undo 重做的反向,即还原
V
- Visual 可视(选择)模式
W
- Words 下个字串的起始
X
- 剪切左边的,与x方向相反
Y
- yank 复制当前行,跟yy差不多。
Z
- ?