明牯工作室 - 嵌入式软件服务

Vim基本操作

| Comments


模式

vi有3个模式:插入模式、命令模式、低行模式。

  • 插入模式:在此模式下可以输入字符,按ESC将回到命令模式。
  • 命令模式:可以移动光标、删除字符等。
  • 低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。

打开

vi filename 打开filename文件
:w 保存文件
:w vpser.net 保存至vpser.net文件
:q 退出编辑器,如果文件已修改请使用下面的命令
:q! 退出编辑器,且不保存
:wq 退出编辑器,且保存文件


移动

以字符为单位移动

  1. h向左移动一个字符;
  2. l向右移动一个字符;
  3. k向上移动一个字符;
  4. j向下移动一个字符;

以普通word为单位移动

  1. w将光标向前移动一个word并停留在下一个word的首字符上,助记:word;
  2. b将光标向后移动一个word并停留在下一个word的首字符上,助记:backward;
  3. e将光标向前移动一个word并停留在下一个word的末字符上,助记:end of word;
  4. ge将光标向后移动一个word并停留在下一个word的末字符上;

[备注]:

  1. 以空白作为word分隔时,以上命令为大写,WBEGE;
  2. 以上命令都可以采取“数字+命令”的方式执行;

移动光标到行头或者行尾

  1. $将光标移动到当前行行尾,此命令与键盘上End键作用相同;
  2. ^将光标移动到当前行的第一个非空白字符上;
  3. 0将光标移动到当前行的第一个字符上,此命令与键盘上Home键作用相同;

[备注]:

  1. $命令接受计数器,其他两个不接受计数器;

移动光标到指定字符上

使用单字符搜索命令可以快速将光标移到当前行的某个字符上。

  1. f在当前行向右查找某个字符并将光标停留其上,助记:find;
  2. F在当前行向左查找某个字符并将光标停留其上;
  3. t在当前行向右查找某个字符并将光标停留于其前一个字符之上,助记:to;
  4. T在当前行向左查找某个字符并将光标停留于其前一个字符之上;

[备注]:

  1. 这四个命令都可使用计数器;
  2. 这四个命令都可以用;,重复执行,不同之处在于,;以与原命令相同的方向执行,,恰好相反;

移动光标到匹配括号上

将光标跳转到与当前光标下的括号相匹配的括号上去:%;

移动光标到指定行上

  1. G跳至文件的底部
  2. gg跳至文件的头部
  3. nG跳到行号为n的行
  4. 数字+%使用百分比将光标移动到文档某个大致的位置:数字+%。此处百分比的计算是以行为单位,而不是以字节数为单位;
  5. H(home)移动到第一行使用命令H(home),M(middle)移动到中间行使用命令M(middle),L(last)移动到最后一行使用命令;
  6. CTRL-G可以显示当前位置信息;
  7. n+向下跳n行
  8. n-向上跳n行

滚屏

  1. CTRL-U使文本向下滚动半屏,相当于显示文本的窗口向上滚半屏,光标所处的行数随滚屏而改变;
  2. CTRL-D使文本向上滚动半屏,相当于显示文本的窗口向下滚半屏,光标所处的行数随滚屏而改变;
  3. CTRL-E使文本向上滚动一行,光标所处的行数不变;
  4. CTRL-Y使文本向下滚动一行,光标所处的行数不变;
  5. CTRL-F向前滚动一整屏,滚动后光标处于第一行;
  6. CTRL-B向后滚动一整屏,滚动后光标处于最后一行;
  7. zz把当前位置处于屏幕的正中央;
  8. zt把当前位置处于屏幕的顶端,助记:top;
  9. zb把当前位置处于屏幕的底端,助记:bottom;

插入

  1. a在当前光标位置的右边添加文本
  2. i在当前光标位置的左边添加文本
  3. A在当前行的末尾位置添加文本
  4. I在当前行的开始处添加文本(非空字符的行首)
  5. O在当前行的上面新建一行
  6. o在当前行的下面新建一行
  7. R替换(覆盖)当前光标位置及后面的若干文本
  8. J合并光标所在行及下一行为一行(依然在命令模式)

删除

  1. x删除当前字符
  2. nx删除从光标开始的n个字符
  3. dd删除当前行
  4. ndd向下删除当前行在内的n行
  5. u撤销上一步操作
  6. U撤销对当前行的所有操作

  1. /vpser向光标下搜索vpser字符串
  2. ?vpser向光标上搜索vpser字符串
  3. n向下搜索前一个搜素动作
  4. N向上搜索前一个搜索动作

复制

  1. yy将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
  2. nyy将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
  3. yw复制从光标开始到词尾的字符。
  4. nyw复制从光标开始的n个单词。
  5. y^复制从光标到行首的内容。
  6. y$复制从光标到行尾的内容。
  7. p粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。
  8. P粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。

替换

  1. :s/old/new用new替换行中首次出现的old
  2. :s/old/new/g用new替换行中所有的old
  3. :n,m s/old/new/g用new替换从n到m行里所有的old
  4. :%s/old/new/g用new替换当前文件里所有的old

配置

执行命令修改文件:

sudo vim /etc/vim/vimrc

在文件尾添加内容如下:

set nobackup                           " 无~后缀的备份文件
set autoindent shiftwidth=4            " 启用自动缩进,并设置自动缩进的宽度为4
set tabstop=4                          " 让tab变成4个字符的宽度
set nu                                 " 显示行号
set mouse=a                            " 鼠标定位
filetype on                            " 检测文件的类型
syntax on                              " 语法高亮度显示
set autoindent                         " 把当前行的对起格式应用到下一行
set smartindent                        " 智能的选择对起方式
set showmatch                          " 设置匹配模式
set ruler                              " 在右下角显示光标位置的状态行
set incsearch                          " 查找提示

Comments