【vim】学习笔记

按功能划分出命令

光标移动

w移动光标到下一个单词的词首,b移动光标到上一个单词的词首;e移动光标到下一个单词的结尾,ge移动光标到上一个单词的结尾。
^或者0(数字零)光标移至当前行首。(0 - 移动到行首
^ - 移动到行首的非空白符)
$光标移至当前行尾
#j#k向下或向上移动#行(set relativenumber 之后非常管用)
gg光标移动到全文开头,在vim才有效,vi中无效
GG光标移动到全文结尾
G 转到最后一行行首
ctrl uctrl d控制屏幕滚动,同时光标跟着定位走。通过:set scroll=10 可以设定一次滚动的举例。

括号跳转:
% 跳到匹配的括号处,如下所有括号类型:{ } [] ()
[{ 跳到本代码块(由{}界定)的开头
[} 跳到本代码块的结尾

编辑(增删改)

a: 在光标的后面开始插入字符
A 在一行的结尾处开始插入字符
i 在光标处插入字符
I 在一行的开头处开始插入字符
o 在光标所在位置的下一行打开新行插入
O 在光标所在位置的上一行打开新行插入
ea 从当前单词末尾开始插入(非常实用)
dd 剪切当前行:,删除多行:3dd(表示删除从光标位置开始的连续3行)
dw 剪切单词,可以实现清空右侧空白符。
J(大写) 将下一行合并到当前行
r 替换单个字母,注意如果是替换为大写字母,建议用shift加目标字母触发,而不要用 caps lock。一个是从操作角度考虑,还得多余按一下 caps lock 还原操作;另一个是很多仿 vim 编辑器不识别 caps lock 按键
操作括号内内容:
ci'、ci"、ci(、ci[、ci{、ci< 分别更改这些配对标点符号中的文本内容
di'、di"、di(、di[、di{、di< 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi< 分别选中这些配对标点符号中的文本内容
c本身的意思是改变,即删除并进入插入模式。
cc 清空当前行, 然后进入插入模式
cw 修改单词。修改光标位置到单词结尾处的单词。
caw 修改单词。修改光标所在的整个单词,即所在的整个单词全部删除后进入插入模式。
ct{某个字母} 修改单词。修改光标位置到某个字母之间的单词,只要碰到首字母就返回。

多窗口、多文件编辑

多窗口

(^表示ctrl)
^wv垂直分割窗口(复制一个本窗口,其实是公用一个 buffer)
^wn水平分割出新的未命名窗口
^wr向右或向下方交换窗口,而^wR则和它方向相反
^ww切换窗口,forcus 和 blur 的切换
^wo只保留当前窗口(window only)
:close 关闭当前窗口

多缓冲区文件

:ls 列出所有打开的缓冲区文件(等价于 :buffers
:b {number, expression} 跳转到指定缓冲区
:bd 关闭当前的单个缓冲区文件(注意关闭窗口不会关闭缓冲区文件)
ctrl+6 切换到下一个文件(必须事先打开过其他文件才可以切换)

多页签

:tabc 关闭当前页签
gt 切换页签(vim 命令模式)

按不同模式划分出的命令

命令行模式(Command-line mode)

主要是对文件整体进行的操作,包括设置,查找
:tab 文件路径 同时编辑多个文件 gt 进行切换不同Tab键
命令行模式下取到从第几行到第几行.表示当前行 ,1,.表示从第一行到当前行 ,比如:1,.d就同样表示删除所有
echo $VIM(注意大小写)显示全局.vimrc的位置
:help {命令}必要时刻去求助 help
:map 查看当前键盘映射有哪些

插入模式(Insert mode)

移动光标:原生的是上下左右键,可以映射配置成ctrl键控制

inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>

命令模式(也称普通模式)(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段
yy复制当前行。经常与p键连用,用作复制粘贴
yw复制单词。
p粘贴。p表示粘贴别的东西进入vim
u撤销
ctrl+r重做(注意不是command)
ZZ(注意是大写) 保存并退出vim
>><<单行缩进(即使光标在行中间位置也可以)
J 合并两行
. 重复上一次命令

可视模式(Visual mode)

用途:选择文件的一部分内容,以便作比如删除,复制等工作
o切换可视模式的选中端点
复制选中区域: y

选择模式(Select mode)

gh进入选择模式,然后移动光标开始选中。当再按下字符时可直接进行替换。

命令模式→可视模式
v一个字符一个字符的选择
V一整行一整行的选择
ctrl+v列选取模式,可以选取竖行文本

其他综合功能划分出的命令

  • 保存并退出vim::wqZZ:x

  • 底行命令行字符替换:
    :#,#s/old/new/g 其中 #,# 代表的是替换操作的若干行中首尾两行的行号。
    :%s/old/new/g 则是替换整个文件中的每个匹配串。等价于%s;old;new;g(用分号做替换分隔符也可以)

  • 查找功能:向前搜索/searchStr 向后搜索?search_text

  • 全选:ggVG
    稍微解释一下上面的命令
    gg 让光标移到全文开头
    V 是进入Visual(可视)模式,并且是整行整行选取
    G 光标移到最后一行

  • 全文格式化(format)缩进:gg=G

  • 防止粘贴时由智能缩进造成排版混乱::set paste

  • 临时返回命令行界面以及重返vim
    mac 下可以使用 ctrl+z (挂起vim)以及 fg(bring to foreground) 来返回 VIM
    但在 cmder 中似乎不起作用,可以尝试使用:sh来退出默认shell,返回命令行界面以及exit来返回VIM

  • 如何查看vim 是否具有某个功能
    vi --version |grep clipboard查看是否具有clipboard 功能,有+则表明由此功能。-则表明无此功能。clipboard 命令会影响vim中的复制是否能复制到系统剪贴板。

  • 上下移动某单行
    :{原始行号} m {移动到的目标行号} 移动到第几行(注意不是相对距离是绝对距离),从 0 开始计算。
    :m +1 下移 1行
    :m -2 上移 1行
    或者dd{k、j移动}p也不错。

  • {行数}G转到指定的行数,比如:9G,转到第9行。建议 G 用shift+g 触发,而不要用 caps lock + g 触发。

  • 插入列(等价于多光标输入)
    ctrl+v进入可视列模式
    shift+i从可视列模式进入插入模式,并输入要插入的内容
    Esc退回到命令模式,在每行的选定区域内新增选中的内容。


其他

vim不支持在command按键上绑定快捷键
操作系统差异。windows系统下用gvim命令,linux系统下用vim命令。

插件

emmet-vim插件
<c-y>,来触发标签扩展,也可以自制 snippet 看链接,具体没研究过。

nerdtree插件——file drawer
深入使用 nerdtree(好多快捷键需要进一步学习)

  • 在vim 中唤醒 nerdtree 操作区:
    tt (自制快捷键)命令模式下切换目录文档
  • 在 nerdtree 操作区的一些基本操作:
    q退出操作区
    ?切换帮助菜单
    go 预览文件内容

vim-autoformat插件
:Autoformat自动格式化,目前针对 html

[ctrlp] fuzzy file finder (尚未使用)
[fugitive] Git Tool。有一些 Git 的高级用法,比如迅速切换各个版本的 commit 代码,一个按键多次还原代码。比如能看到各个行代码是谁提交的。

Vim 寄存器

  • 使用d, c, s, x等会删除字符的命令时,被删除字符会进入匿名寄存器""。
  • "*"+在Mac和Windows中,都是指系统剪切板(clipboard),例如"*yy即可复制当前行到剪切板。
  • 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
  • 查看 VIM 寄存器的内容,通过:reg
    非常系统的博客

vim中的配置项

vim的set relativenumberset number有冲突部分,set number必须是在set relativenumber之后做。

参考资料

总有你要的编程书单(GitHub)https://juejin.im/entry/5920f4f0a0bb9f005f4d9535
vim插件 http://vimawesome.com/
[vim 切换页签快捷键(还没完全应用成功)]https://www.liurongxing.com/vim-tab-shortcut.html
方方老师的配置:https://github.com/FrankFang/dot-files/blob/master/vimrc

边角知识学习

y 代表从缓冲区拉至寄存器
.vimrc 设置缩进之道

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335