mirror of
https://github.com/kaka111222333/kaka111222333.github.io.git
synced 2025-12-23 02:04:52 +08:00
创建博客
This commit is contained in:
267
_posts/2014-01-05-vim.md
Normal file
267
_posts/2014-01-05-vim.md
Normal file
@@ -0,0 +1,267 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user