打开及保存
命令
: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<—> 命令模式下用"+yCtrl-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/?patternn 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 - ?