VIM高手进阶操作

100i word [ESC] 插入100个word
. 重复上一个命令
3. 重复3次插入word




=======光标移动========
NG 到第N行
gg 第一行
G 最后一行
0 → 到行头
^ → 到本行的第一个非blank字符
$ → 到行尾
g_ → 到本行最后一个不是blank字符的位置。
fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
t, → 到逗号前的第一个字符。逗号可以变成其它字符。
3fa → 在当前行查找第三个出现的a。
F 和 T → 和 f 和 t 一样,只不过是相反方向。


% 匹配括号移动,包括 (, {, [.
*和# 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
H 移动到视野内的首行
M 移动到视野内的中间行
L 移动到视野内的末行




========选择========


0y$ 拷贝从行头到行尾的字符
y2/foo 拷贝2个 "foo" 之间的字符串
dt" → 删除所有的内容,直到遇到双引号


区域选择 <action>a<object> 或 <action>i<object>
action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。
假设有一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置。
vi" → 会选择 foo.
va" → 会选择 "foo".
vi) → 会选择 "foo".
va) → 会选择("foo").
v2i) → 会选择 map (+) ("foo")
v2a) → 会选择 (map (+) ("foo"))


按【v】 键进入选择模式,然后按h,j,k,l移动光标,选择文本,然后按 【y】 进行复制,按 【p】 进行粘贴。


块操作(<C-v>进入)
^ → 到行头
<C-v> → 开始块操作
<C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。
在Windows下的vim,你需要使用 <C-q> 而不是 <C-v> ,<C-v> 是拷贝剪贴板。
J → 把所有的行连接起来(变成一行)
< 或 > → 左右缩进
= → 自动给缩进 




宏录制
qa 把你的操作记录在寄存器 a。
于是 @a 会replay被录制的宏。
@@ 是一个快捷键用来replay最新录制的宏。
在一个只有一行且这一行只有“1”的文本中,键入如下命令:


qaYp<C-a>q→
qa 开始录制
Yp 复制行.
<C-a> 增加1.
q 停止录制.
@a → 在1下面写下 2
@@ → 在2 正面写下3
现在做 100@@ 会创建新的100行,并把数据增加到 103.




=========字符相关==========
【guu 】 – 把一行的文字变成全小写。或是【Vu】


【gUU】 – 把一行的文件变成全大写。或是【VU】


按【v】键进入选择模式,然后移动光标选择你要的文本,按【u】转小写,按【U】转大写


【ga】 –  查看光标处字符的ascii码


【g8】 – 查看光标处字符的utf-8编码


【gf】  - 打开光标处所指的文件 (这个命令在打到#include头文件时挺好用的,当然,仅限于有路径的)


【*】或【#】在当前文件中搜索当前光标的单词


===========缩进================
【>>】向右给它进当前行 【<<】向左缩进当前行


【=】  - 缩进当前行 (和上面不一样的是,它会对齐缩进)


【=%】 – 把光标位置移到语句块的括号上,然后按=%,缩进整个语句块(%是括号匹配)


【G=gg】 或是 【gg=G】  - 缩进整个文件(G是到文件结尾,gg是到文件开头)


daw 当在光标在一个单词中间时,删除此单词

"*yy 复制到剪贴板
"*p 从剪贴板粘贴




Tab页浏览目录
:Te  全称是 :Texplorer
gt   – 到下一个页


gT  - 到前一个页


{i} gt   – i是数字,到指定页,比如:5 gt 就是到第5页


你可以以使用 【:tabm {n}】来切换Tab页。


gvim应该是:Ctrl+PgDn 和 Ctrl+PgUp 来在各个页中切换。


如果你想看看你现在打开的窗口和Tab的情况,你可以使用下面的命令:


:tabs
:tabclose [i] – 如果后面指定了数字,那就关闭指定页,如果没有就关闭当前页


最后提一下,如果你在Shell命令行下,你可以使用 vim 的 -p 参数来用Tab页的方式打开多个文件,比如:


vim -p cool.cpp shell.cpp haoel.cpp
vim -p *.cpp


注:如果你想把buffer中的文件全转成tab的话,你可以使用下面的命令


:bufdo tab split




缓冲区
用:E 浏览打开的文件都没有被关闭,这些文件都在缓冲区中。你可以用下面的命令来查看缓冲区:


:ls
:buffer 4
:buffer src/http/ngx_http.c


:bnext      缩写 :bn
:bprevious   缩写 :bp
:blast  缩写 :bl
:bfirst 缩写 :bf


上图中,我们还可以看到5有一个%a,这表示当前文件,相关的标记如下:


- (非活动的缓冲区)
a (当前被激活缓冲区)
h (隐藏的缓冲区)
% (当前的缓冲区)
# (交换缓冲区)
= (只读缓冲区)
+ (已经更改的缓冲区)


窗口
<C+W>+hjkl或<C+hjkl> 窗口间移动
<C+W>= 均分窗口
<C+W>+ 高度加1
<C+W>- 高度减1
<C+W>< 宽度减1
<C+W>> 宽度加1
<C+W>_ 最大高度
<C+W>| 最大宽度
qall 同时退出所有窗口


session
mksession filename.vim 创建session文件
wviminfo filename.viminfo 创建一个viminfo文件
source 载入会话文件
rviminfo 读入viminfo文件


杂乱命令
:helptags $HOME/.vim/doc 添加新的帮助文件到vim


vim中的^M
在linux系统里设置set fileformats=unix可以看到从windows迁移过来的文件中的换行符乱码,为^M,输入命令%s/^M/\r/g,命令中的^M通过Ctrl+v+M输入


================搜索=====================
:vimgrep /{pattern}/[g][j]{file}...
with 'g' every match is added;
with 'j' only the quickfix list is updated;


:vimgrep /keyword/gj D:/dir/*/*.txt 不包含子文件夹搜索目录中的关键字
:vimgrep /keyword/gj D:/dir/**/*.txt 包含子文件夹搜索目录中的关键字
使用j关键字进行搜索后需要打开quikfix窗口查看匹配结果 :cw
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章