Vim是从vi发展而来的文本编辑器,可以用颜色或底线等方式来显示一些特殊的信息。Vim是Linux中必不可少的工具,搭建网站修改配置文件时经常用到。本教程介绍Vim的模式和常用操作。

Vim模式

模式 作用 模式转换
普通模式

(Normal Mode)

在该模式下,您可以复制、粘贴、删除字符或行。
  • 运行vim <文件名>打开文件时,即进入普通模式。
  • 在其他四个模式下,按Esc键即进入普通模式。
插入模式

(Insert Mode)

在该模式下,您可以插入字符。 在普通模式下,按i,I,a,A,o,O中任一字符即进入插入模式。
说明 进入插入模式后,编辑器左下角会显示 -- INSERT --
替换模式

(Replace Mode)

在该模式下,您可以替换字符。 在普通模式下,按R即进入替换模式。
说明 进入替换模式后,编辑器左下角会显示 -- REPLACE --
可视模式

(Visual Mode)

在该模式下,您可以选择文本。命令(如,复制、替换、删除等)仅作用于选中的文档。 在普通模式下,按v即进入可视模式。
说明 进入可视模式后,编辑器左下角会显示 -- VISUAL --
命令模式

(Command Mode)

在该模式下,您可以查找字符串、替换字符串、显示行号、保存修改、退出编辑器等。 在普通模式下,按:即进入命令模式。

插入

基本命令
  • i:在当前字符的左边插入。
  • I:在当前行的行首插入 。
  • a:在当前字符的右边插入。
  • A:在当前行的行尾插入。
  • o:在当前行下面插入一个新行。
  • O:在当前行上面插入一个新行。
示例
本示例中使用的 example.conf文件,如下所示:
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf			
例1:在配置文件 example.conf的第一行,插入 Location。步骤如下:
  1. 运行vim example.conf命令打开文件,进入普通模式。
  2. i进入插入模式。
  3. 输入Location
  4. 按回车键换行。
  5. Esc键退出插入模式。
  6. :wq保存文件并退出。
    插入完成后, example.conf文件如下所示:
    Location
    # To be able to use the functionality of a module which was built as a DSO you
    # have to place corresponding `LoadModule' lines at this location so the
    # directives contained in it are actually available _before_ they are used.
    # Statically compiled modules (those listed by `httpd -l') do not need
    # to be loaded here.
    #
    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    Include conf.modules.d/*.conf			
例2:在配置文件 example.conf第十行的行首,插入 #。步骤如下:
  1. 运行vim example.conf命令打开文件,进入普通模式。
  2. :10将光标定位到第10行。
  3. I进入插入模式。
  4. 输入#
  5. Esc键退出插入模式。
  6. :wq保存文件并退出。
    插入操作完成后, example.conf文件如下所示:
    # To be able to use the functionality of a module which was built as a DSO you
    # have to place corresponding `LoadModule' lines at this location so the
    # directives contained in it are actually available _before_ they are used.
    # Statically compiled modules (those listed by `httpd -l') do not need
    # to be loaded here.
    #
    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    #Include conf.modules.d/*.conf		
例3:在配置文件 example.conf中,在 Include conf.modules.d/*.conf行的下一行插入 LoadModule rewrite_module modules/mod_rewrite.so。步骤如下:
  1. 运行vim example.conf命令打开文件,进入普通模式。
  2. 运行/Include conf.modules.d/*.conf找到目标行。
  3. o进入插入模式。
  4. 输入LoadModule rewrite_module modules/mod_rewrite.so
  5. Esc键退出插入模式。
  6. :wq保存文件并退出。
    插入完成后, example.conf文件如下所示:
    # To be able to use the functionality of a module which was built as a DSO you
    # have to place corresponding `LoadModule' lines at this location so the
    # directives contained in it are actually available _before_ they are used.
    # Statically compiled modules (those listed by `httpd -l') do not need
    # to be loaded here.
    #
    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    Include conf.modules.d/*.conf
    LoadModule rewrite_module modules/mod_rewrite.so							

替换

基本命令

R:替换光标高亮的字符,直至按下Esc键退出替换模式。

示例
本示例使用的 example.conf文件,如下所示:
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride None				
例:将配置文件 example.conf中的 AllowOverride None更改为 AllowOverride All
  1. 运行vim example.conf命令打开文件,进入普通模式。
  2. 运行/AllowOverride None找到目标。
  3. 移动光标至None的首字母。
  4. R进入替换模式。
  5. 输入All和一个空格。
    说明 None中共包含4个字符,而 All只包含3个字符,因此输入All之后,需再输入一个空格。
  6. Esc键退出替换模式。
  7. :wq保存文件并退出。
    更改后的 example.conf文件,如下所示:
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All							

删除

基本命令
  • x:删除光标高亮的那一个字符。
  • nx(n为数字): 删除光标高亮的字符及其后面的n-1个字符。
  • dd:删除光标所在的那一行。
  • ndd(n为数字):删除光标所在行及其下面的n-1行。
示例
本示例中使用的 example.conf文件如下所示:
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80				
例1:在配置文件 example.conf中,将 #Listen 12.34.56.78:80行首的 #删除。步骤如下:
  1. 运行vim example.conf命令打开文件,进入普通模式。
  2. 运行/#Listen 12.34.56.78:80找到目标,光标此时定位在#字符上。
  3. x删除#
  4. :wq保存文件并退出。
    删除完成后, example.conf文件如下所示:
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # ports, instead of the default. See also the <VirtualHost>
    # directive.
    #
    # Change this to Listen on specific IP addresses as shown below to
    # prevent Apache from glomming onto all bound IP addresses.
    #
    Listen 12.34.56.78:80  
    Listen 80						
例2:在配置文件 example.conf中,将 #Listen 12.34.56.78:80行和下一行的内容删掉。步骤如下:
  1. 运行vim example.conf命令打开文件,进入普通模式。
  2. 运行/#Listen 12.34.56.78:80找到目标。
  3. 2dd删除以下内容。
    #Listen 12.34.56.78:80
    Listen 80
  4. :wq保存文件并退出。
    删除完成后, example.conf文件如下所示:
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # ports, instead of the default. See also the <VirtualHost>
    # directive.
    #
    # Change this to Listen on specific IP addresses as shown below to
    # prevent Apache from glomming onto all bound IP addresses.
    #