Files
kaka111222333-kaka111222333…/_posts/2014-01-05-vim.md
2019-11-17 01:12:14 +08:00

268 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
layout: post
title: VIM
tags: VIM Linux
categories: special
---
* TOC
{:toc}
## 1.切换模式
`i` → Insert 模式,在光标前插入
`ESC` → 回到 Normal 模式Normal 模式下,所有键都是功能键
`:help <command>` → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(退出帮助需要输入:q
## 2.存盘 & 退出
`:e file` → 打开一个文件
`:w` → 存盘
`:saveas file` → 另存为
`:x` `ZZ``:wq` → 保存并退出 (:x 表示仅在需要时保存ZZ不需要输入冒号并回车)
`:q!` → 退出不保存
`:qa!` 强行退出所有的正在编辑的文件,就算别的文件有更改。
`:bn``:bp` → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(`:n`到下一个文件)
## 3.插入
`a` → 在光标后插入
`o` → 在当前行后插入一个新行
`O` → 在当前行前插入一个新行
`cw` → 替换从光标所在位置后到一个单词结尾的字符
## 4.删除
`x` → 删当前光标所在的一个字符。
`dd` → 删除当前行,并把删除的行存到剪贴板里
`d` → 删除,常用于组合
## 5.拷贝 & 粘贴
`yy` → 拷贝当前行当行于 ddP
`p` → 粘贴(小写后)
`P` → 粘贴(大写前)
`y` → 拷贝,常用于组合
>vim有12个粘贴板分别是`0 1 2 ... 9 a " ``:reg`命令可以查看各个粘贴板里的内容在vim中简单用`y`只是复制到`"`粘贴板里,同样用`p`粘贴的也是这个粘贴板里的内容。
>
>* `"Ny` 指定`N`粘贴板复制(主意引号)
>
>* `+` 粘贴板是系统粘贴板,`"+y`复制,`"+p`粘贴
## 6.定位
`hjkl` (←↓↑→)
### 6.1 行内定位
`0` → 数字零,到行头
`^` → 到本行第一个不是blank字符的位置所谓blank字符就是空格tab换行回车等
`$` → 到本行行尾
`g_` → 到本行最后一个不是blank字符的位置。
`fa` → 到本行下一个为`a`的字符处
`Fa` → 到本行上一个为`a`的字符处
`ta` → 到`a`前的第一个字符
`Ta` → 到`a`后的第一个字符
### 6.2 行间定位
`NG` → 到第 `N`命令中的G是大写的
`:N` → 到第 `N`
`gg` → 到第一行。相当于1G或 :1
`G` → 到最后一行。
### 6.3 全文定位
`w` → 到下一个单词的开头。(默认单词形式)
`e` → 到当前单词的结尾。(默认单词形式)
`W` → 到下一个单词的开头。(包含空格`?`
`E` → 到当前单词的结尾。(包含空格`?`
`%` → 到匹配的括号处,包括 `( { [` (需要把光标先移到括号上)
`*` → 到`下一个`匹配单词
`# ` → 到`上一个`匹配单词
`/pattern` → 搜索 `pattern` 的字符串(需要回车,如果搜索出多个匹配,可按`n`键到下一个)
## 7.Undo & Redo
`u` → undo
`<Ctrl-r>`→ redo
## 8.重复
`.` → (小数点) 可以重复`上一次`的命令
`N <command>` → 重复某个命令`N次`command可以为`.`
>使用`.`时,若上一次的命令为`N <command>`,则原样执行`N <command>`
>
>使用`N <command>`时,若`command`为`.`,则`N`会覆盖`.`自带的次数
## 9.组合
* `<start><command><end>`
>例如
>
>`0y$` → 从行头拷贝到行尾
>
>`ye` → 从当前位置拷贝到本单词的最后一个字符
>
>`y2/foo` → 拷贝2个foo之间的内容
## 10.区域选择
`<action>Na<object>` 包括object
`<action>Ni<object>` 不包括object
* `action` 可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
* `object` 可能是: `w` 一个单词, `W` 一个以空格为分隔的单词, `s` 一个句字, `p` 一个段落;也可以是成对出现的字符:`" ' ) } ]`
* `N` 表示选取第N层不写默认为1
## 11.自动提示
`<Ctrl-n>``<Ctrl-p>`
## 12.宏录制
`qa` → 把操作记录在寄存器 `a`
`q` → 停止录制
`@a` → replay`a`寄存器中的宏。
`@@` → replay最新录制的宏。
>示例:
>
>在一个只有一行且这一行只有“1”的文本中键入如下命令
>
>`qaYp<C-a>q`
>
>`qa` 开始录制
>
>`Yp` 复制行.
>
>`<Ctrl-a>` 增加1.
>
>`q` 停止录制.
这个宏的作用是复制上一行并增加1
测试:
@a → 在1下面写下 2
@@ → 在2 正面写下3
现在做 100@@ 会创建新的100行并把数据增加到 103.
## 13.可视化选择
`v` 可视
`V` 可视行
`<Ctrl-v>` 可视块
选择了可视化范围后,可做如下操作:
>* `J` → 把所有的行连接起来(变成一行)
>
>* `<` → 左缩进
>
>* `>` → 右缩进
>
>* `=` → 自动缩进
在所有被选择的行后加上点东西:
`<Ctrl-v>`
选中行
`$` 到行最后(不加将在每行行首编辑)
`A` 块操作中进入插入模式
输入
`ESC`
## 14.分屏
`split` → 创建分屏
`vsplit` → 创建垂直分屏
`<Ctrl-w>方向` → 方向可以是 hjkl 或 ←↓↑→,用来切换分屏。
`<Ctrl-w>_ ` → 最大化尺寸
`<Ctrl-w>|` → 垂直分屏最大化尺寸
`<Ctrl-w>+` → 增加尺寸
`<Ctrl-w>-` → 减小尺寸
---
## 其他
帮助文档 → `:help usr_02.txt`
gvim 启动设置(显示行号,配色,代码高亮):
>编辑安装目录下`_vimrc`文件
>
>添加如下代码
>
>set nu!
>
>colorscheme desert
>
>syntax enable
>
>syntax on