VIM
进入插入模式
命令 | 光标位置 |
---|---|
i | 字符处 |
I | 行首 |
a | 字符后 |
A | 行尾 |
O | 在上行新建一行处 |
o | 在下行新建一行处 |
退出与保存
- 保存退出
- ZZ 保存退出
- :w 保存
- :wq 保存退出
- :x 保存退出(如果内容和源文件一致 则不保存)
- :q! 不保存退出
- 另存
- :w FILE 保存为FILE
- :w! 保存只读文件(root)
- :N,M2w FILE 将N行到M行的内存另存到FILE中
- 其他
- :r FILE 将FILE内容填充到当前文件中
光标移动
- 逐字符移动
- h, l ,j ,k
- left, right, up, down (iMode)
- 逐单词移动
- w 移至下一个单词词首
- e 移至当前单词/下一个单词词尾
- b移至当前单词/前一个单词词首
- shift+left/right 单词词首移动 (iMode)
- 翻屏操作
- ctrl+b/f 上/下翻一屏
- ctrl+u/d 上/下翻半屏
- shift+up/down 上/下翻一屏
- 行内跳转
- 0, ^(非空白字符) 行首
- $, g_(非空白字符) 行尾
- NG 跳转到第N行
- G 跳转到最后一行
- gg 跳转到第一行
- NfC 跳转到第N个C字符处
- NtC 同Nfc 搜索时方向相反
- % 匹配括号移动
- mC 标记 ‘C 标记跳转 (”回到上一次位置)
编辑命令
- 基本操作
- x 删除单个字符
- dd 删除整行
- yy 复制整行
- P/p 粘贴至所在行 上方/下方 字符 前方/后方
- 组合操作
- s 删除当前字符后插入 同xi
- cw 删除当前单词后插入 同dwi
- Nyy 复制从当前行开始的N行
- ye 复制从光标到单词结尾的字符
- yb 复制从光标到单词开头的字符
- Ndd 删除从当前行开始的N行
- Nx 删除从当前字符开始的N个字符
- de 删除从光标到单词结尾的字符
- db 删除从光标到单词开头的字符
其他模式
- 替换模式
- r 替换单个字符 用法同x
- R 替换多个字符
- 撤销模式
- u 撤销前一次编辑操作 (Nu 撤销N次)
- Ctrl+r 重复最近一次操作
- 选取模式
- v 按字符选取
- V 按行选取
- Ctrl+V 按块选取
查找和替换
- 查找
- /PATTERN 从前往后查找
- ?PATTERN 从后往前查找
n 查找下一个 N 查找上一个
- 替换
:START_LINE,END_LINEs/OLD_STR/NEW_STR/[g]
用法同sed 当前行(.) 最后一行($)
打开文件时操作
vim +N FILE
光标自动处于N行
vim + FILE
光标自动处于最后一行
vim +/PATTERN FILE
光标自动处于符合PATTERN的行
vim FILE...
打开多 个文件
* :next/:prev 切换 上/下 一个文件*
:first/:last 切换最 前/后 一个文件
vim -o/O FILE...
水平/垂直 分割窗口编辑多个文件
:qa 退出所有 文件/窗口
打开多个文件和分屏
:e FILE
打开另一个文件
*:bn :bp来切换上/下一个文件
:wq全部保存并退出*
Ctrl+w, s
水平拆分窗口
Ctrl+w, v
垂直拆分窗口
Ctrl+w, ARROW
窗口间切换光标
*:sp 水平拆分窗口
:vsp 垂直拆分窗口
:qa 退出所有 文件/窗口*
其他操作
:! CMD 和shell交互 不用退出vim也能执行命令
vim出错的应对情况: 删除对应名为FILENAME.swp的文件
vim高级操作例子
0<Ctrl-v>[选取行数]I[输入字符串]<ESC>
批量在行首添加字符串
<Ctrl-v>[选取行数]$A[输入字符串]<ESC>
批量在行尾添加字符串
VIM配置文件
/etc/vimrc 全局配置文件
~/.vimrc 个人配置文件
~/.viminfo VIM操作记录文件
VIM设置
显示/隐藏 行号: set nu/nonu
忽略/区分 大小写: set ic/noic
设定 自动缩进/不缩进: set ai/noai
查找单词时 高亮/不高亮: set hlsearch/nohlsearch
语法 高亮/不高亮: syntax on/off
C/C++缩进方式: set cindent
可以用其他命令以及map键位映射等高级设置配置VIM
vim简易设置(shell脚本)
set nu
set tabstop=4
set ai
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
imap if<TAB> if [ <RIGHT>; then<cr>fi<ESC>O<TAB><UP><RIGHT>
imap for<TAB> for in ; do<cr>done<ESC>O<TAB><UP>
imap case<TAB> case in<cr>*)<cr><TAB><cr>;;<cr><bs>esac<ESC>4k2li
imap func<TAB> (<RIGHT> {