[TOC]
# VIM基础
在Linux系统上最常用的就是VIM编辑器,它除支持Linux外还支持Mac和Windows。VIM分为三种使用模式,分别为:
* 输入模式:在命令模式下输入(i,a,A等),可以进入输入模式
* 命令模式 (默认):任何输入都会作为编辑命令,而不会出现屏幕上,若输入错误则有声音提示
* 特殊模式:以“:”或者“/”为前导指令,出现屏幕的最下一行,任何输入当作命令执行。
## 命令模式
| 命令 | 输入方法 |
| --- | --- |
| **进入输入的方法** |
| a | 在光标后面输入文本 |
| A | 在当行的末尾输入文本 |
| i | 在光标后输入文本 |
| I | 在当前行输入文本 |
| o | 在当前行输入新一行 |
| O | 在当前行前输入新一行 |
| **光标移动的方法** |
| b | 移动到当前单词开始 |
| e | 移动到当前单词尾开始 |
| w | 向前移动一个单词 |
| h | 向前移动一个字符 |
| j | 向上移动一行 |
| k | 向下移动一行 |
| l | 向后移动一个字符 |
| **删除操作** |
| x | 删除光标所在的字符 |
| dw | 删除光标所在的单词 |
| d$ | 删除光标至行尾所有字符 |
| dd | 删除当前行 |
| **改变与替换操作** |
| r | 替换光标所在字符 |
| R | 替换字符序列 |
| cw | 替换一个单词 |
| cb | 替换光标所在的前一个字符 |
| c$ | 替换自光标位置至尾行的所有字符 |
| **拷贝粘贴命令** |
| yw | 将光标所在的单词拷贝到剪贴板 |
| y$ | 将光标至尾的字符拷贝如剪贴板 |
| yy | 将当前行拷贝到剪贴板 |
| p | 将剪贴板的内容粘贴到光标后 |
| P | 将剪贴板的内容粘贴到光标前 |
## 特殊模式
| 命令 | 输入方法 |
| --- | --- |
| :q | 不保存退出 |
| :q! | 不保存强制退出 |
| :w | 保存编辑 |
| :w filename | 存入文件filename中 |
| :w! filename | 强制存入文件filename中 |
| **其他命令** |
| :set nu | 显示行号 |
| :nG | 跳至第n行 |
| :u | 撤销 |
| . | 重做 |
| :nyy | 拷贝第n行 |
| :e filename | 创建新文件 |
| :n filename | 加载新文件 |
| :vnew filename | 同时打开新文件 |
# VIM案例
批量给文件增加注释。
```
:1,10s/^/#/g
```
批量删除文件注释。
```
:1,10s/^#//g
```
批量替换关键字root为admin。
```
:%s/root/admin/gc
```
# VIMRC文件的配置
编辑宿主目录中的“ vim ~/.vimrc ”文件 ,增加以下内容。 执行 “ source .vimrc ”命令,用于加载此文件并立即生效。
```
set number
set shiftwidth=4
set softtabstop=4
set autoindent
set fileencodings=utf-8,gb2312,gbk,gb18030,big5
set fenc=utf-8
set enc=utf-8
set background=dark
```
| 命令 | 解释 |
| --- | --- |
| set number | 设置行号 |
| set tabstop=4 | *tabstop*选项设置 tab 字符的显示宽度为多少个空格,默认值是 8 |
| set autoindent | 设置自动缩进 |
| set fileencodings=utf-8,gb2312,gbk,gb18030,big5 | 文件编码 |
| set fenc=utf-8 | fencs,是用来在打开文件的时候进行解码的猜测列表 |
| set enc=utf-8 | enc,其作用是显示, 不管最后的文件是什么编码的,VIM都会将其转换为当前系统编码来进行处理 |
| set background | 设置背景颜色 |
# 本章小结
本章主要介绍Linux下最常用的编辑器VIM的基本使用,关于它的三种模式,以及在命令模式和特殊模式下的快捷键。最后还介绍了VIM配置文件的使用方便我们将常用的方法规划到配置文件中。下一章我们将会介绍系统管理,介绍那些系统运维工程师经常会用的系统文件。
# 习题
1.复制 /etc/passwd 文件到 /tmp 目录,并修改passwd文件中的关键字,将关键字root替换为administrator。
2.复制 /etc/passwd 文件到 /tmp 目录,将“#”批量替换第一列。