vim学习3-《Vim实用技巧》
注:<C-o>代表 按着Ctrl+o
其他
删除
J - join line 。删除空白行 \n \t
xp 调换两个字符的位置
查找并跳转
查找光标所在的单词,“*” next identifier , ";" 下一个。 ","上一个
复制
y$ 复制到光标所在位置到该行最后一个字符。
"+y 复制选中内容到+寄存器,也就是系统的剪贴板,供其他程序用
来自 <https://www.cnblogs.com/webStyle/p/4354464.html>
剪切
移动将到 xx 行
:开始行, 结束行 move 目标行
6,9 co 12
复制第6行到第9行之间的内容到第12行后面。
移动当前行向上或向下
nnoremap <C-S-Up> ddP
nnoremap <C-S-Down> ddp
移动光标:
Ctrl + O 移动光标到前一次位置
Ctrl + I 移动光标到后一次位置
来自 <https://blog.csdn.net/u011046042/article/details/49884215>
H M L 分别让光标跳到当前页 首 中 尾 行。
方便的组合:
f+)+a,就可以在括号后面插入; v+i+(,选中所有括号里面的内容
来自 <https://www.cnblogs.com/litifeng/p/5651283.html>
滚屏
- ”CTRL+U”显示文本的窗口向上滚动了半屏。
- “CTRL+D”命令将窗口向下移动半屏。
- “CTRL+E”向上滚动一行。
- “CTRL+Y”向下滚动一行。
- “CTRL+F”向前滚动一整屏。
- “CTRL+B”向后滚动一整屏。
- “zz”命令会把当前行置为屏幕正中央。
- “zt”命令会把当前行置于屏幕顶端。
- “zb”则把当前行置于屏幕底端.。
j. “ze” 屏幕移动到最左边
k. “zs”屏幕移动到最右边
来自 <https://blog.csdn.net/qq_36084640/article/details/79312354>
标记与跳转
'{mark} |
跳转标志处 |
标志所在的行 |
`{mark} |
跳转标志处 |
标志所在的行、列位置 |
m{a_zA_Z} |
设置位置标志 |
大写字母时为全局标志,可在文件间跳转 |
marks |
列出标识位置 |
|
来自 <https://blog.csdn.net/xidwong/article/details/75581370>
eg. mA 'A
idea 非vim模式也可以 Ctrl+F11 1, Ctrl+1
vim自动创建的位置标志
Col1 |
Col2 |
Col3 |
` |
当前文件中上次跳转动作之前的位置 |
|
. |
上次修改的位置 |
|
缩进
>> 相当于TAB 可以增加缩进 << 减少缩进
>G 可以增加 从当前行到末尾行的缩进
删除:
C 等效 c$
s 等效 cl
S 等效 ^C
重复
命令 |
重复 |
回退 |
/pattern<CR> ?pattern<CR> |
n |
N |
查找 f/t/F/T |
; |
, |
执行替换 :s/target/replace |
& |
u |
技巧81 高亮匹配
hlsearch , 禁用:set nohlsearch 或者 :se hls! , :se nohls
技巧1 认识“.”
微小的宏,重复上次修改,可以是修改的单位可以是字符、整行、文件。
用于格式化 eg. >G j. j. 一个.代替 >G
eg A;<Esc> j. j. j. 一个.代替A;<Esc>
将+替换成“ + ”, f+ s + <Esc> ; . ;. 一个.代替了 s + <Esc>
用i <右键> <Esc>可以代替s + <Esc>
("+abc+","+cde+") >>> (" + abc + "," + cde + ")
#* 查找相同的字符
可以配合n.替换
eg. 查找Int 替换成 float
移动到int的i上,*到下一个int然后#回来 , cwfloat<ESC> n.
和 :%s/int/float/g 类似
<C-a> <C-x> 对数字加 减 可以是10<C-a>
技巧11 多用重复,少用数字,方便u撤销
技巧13 在插入模式中即时更正错误
插入模式使用ctrl+h 删除前一字符,ctrl+w删除前一单词,ctrl+u删除至行首
技巧14 返回普通模式
<ESC> 或者 <C-[>
<C-o> 切换到【插入-普通模式】 , 可以执行一次普通模式的命令,执行完后回到插入模式中。
技巧15 不离开插入模式,粘贴寄存器中文本<C-r>{rigister}
插入模式中使用 <C-r>0
使用<C-r><C-p>{register} 会原义插入,并减少不必要的缩进
1. 匿名寄存器
使用
d
,c
,s
,x
等会删除字符的命令时,被删除字符会进入匿名寄存器""
。 你可以认为""
寄存器是一个指针,指向刚才被存到的寄存器。使用
y
命令未指定寄存器会存到"0
寄存器中,同时""
会与该寄存器保有同样的值。 这意味着你使用p
和"p
总会得到同样的结果。2. 编号寄存器
编号寄存器从
"0
到"9
共 10 个,其中"0
保存着拷贝来的字符串,"1
到"9
保存着删除掉的字符串。 删除操作符包括s
,c
,d
,x
。 删除掉的字符串会被存到"1
中,上次删除的则会被存到"2
中。以此类推,Vim 会保存你最近的 9 次删除。
- 只有整行整行的删除,和通过段落级别的移动指令(包括
%,(,),/,`,?,n,N,{,}
) 的删除才会被放到"1
中。- 当用户指定拷贝操作的寄存器时(如
"ap
),"0
不会被写入;但删除操作一定会被写入到"1
中。
"0
寄存器很有用,比如我们 copy 了一段文本然后用它替换另一段文本。 这时默认寄存器""
中的值就变成了被替换文本,如果还需要用 copy 的文本继续替换的话就需要"0p
了。
技巧16 随时随地做运算
插入模式下
<C-r>=6*35<CR>
<C-v>{数字} 等于对应的字符如: <C-v>65 等于A
技巧21 选择高亮选区
gv 重选上次高亮选区
o切换到高亮选区的另一端
可以对选区进行 > 后 . . . . 来重复缩进
vit 选择标签内的内容。 。innerHtml 。 it 表示inside tag
vat , at表示 arount tag
vab / vib , select a () block.
vaB / viB , select a {} block;
所以对标签内的内容大写: gUit 。下一行重复: j.
快速替换一行为- Vr-
技巧27 命令行模式
这里[x]指 从/到 寄存器x中
:[range]delete [x]
:[range]yank [x]
:[line]put [x]
:[range]subsititute/{pattern}/{string}/[flags]
:数字 等于 数字G
:数字 操作 如: :3y 复制第三行的内容 :3d 删除第三行内容, :3,5y 复制3到5行内
.代表当前行,所以 当前行到末尾行为: :.,$
%s代表所有行, 如替换的时候 :%s/xx/cc/gc
%s等同于 :1,$
0为虚拟行,位于文件正上方
高亮区的时候按: , 会出现 :'<,'> 可以理解成选择高亮区
目标行复制到当前行下方 :数字copy. 这里copy可以换成co或者t ,.代表当前行下方
技巧30 在范围上执行普通模式命令
Ex命令:
先A; 行尾增加一个分号。
然后 jVG,选中到最尾行。
然后 :'<,'>normal . 让选中行都执行 行尾添加分号的操作。
:%normal A; 符号%代表整个文件范围
可以用@:来重复Ex命令
技巧35 运行shell命令
在编写a.py的同时,:w 然后 :!python a.py看效果
:!{cmd}只能执行一条命令,:shell 可以启动一个shell会话 执行多条,exit退出。
也可以<C-d>到将vim变到后台,然后exit退出
把缓冲区内容作为标准输入或输出
:read !{cmd} ,如 :read !ls a*
技巧39 将工作区分成窗口
<C-w>s 水平切分
<C-w>v 垂直切分
切换窗口
<C-w>w 窗口间循环切换
<c-w>h 切换到左边窗口
<c-w>j
<c-w>k
<c-w>l
关闭窗口
<C-w>c 关闭活动窗口
<C-w>o 只保留活动窗口,关闭其他所有窗口
切换标签页
:tabedit {filename} 打开新的窗口页
:tabc 关闭当前窗口页
:tabo 只保留当前窗口页
gt gT 分别是切换Tab
{N}gt 切换到编号为{N}的标签页。默认从1开始。