Vim 常规教程

vim 入门到进阶

vim 有四种使用模式

  • 编辑模式, 按 ESC切换
  • 写入模式, 在编辑模式 按 a i 切换
  • 可选模式, 在编辑模式 按 v V 切换
  • 命令模式, 在编辑模式 按 : 切换

编辑模式

vim newtext.txt # bash命令下,如果当前没有文件则会新建一个空文件.

:e /home/alice/newtext.txt # vim 命令模式下打开文件.

:w ... # 写入文件
:q ... # 退出文件
:q! ... # 强制退出文件,修改文件但未保存会有提示,强制退出则不提示.

:wq ... # 保存并退出文件,加!可强制保存退出.

/ xxx # xxx是字符串, 寻找字符串,n 或 N 上下查询.

. # 重复上一次的操作

编辑文件

[插入] 在
编辑模式

下输入 A

光标 前

输入 a

光标 后

输入 i 首

输入 I 尾

输入 o 上一行

输入 O 下一行

输入 [修改] 在
编辑模式

下输入 R

修改 整行

内容 r

修改 单个

字符 g~

反转大小写 gu

转换为小写 gU

转换为大写 [缩进] 在
编辑模式

下输入 >

增加缩进 <

减小缩进 =

自动缩进 [删除] 在
编辑模式

下输入 x

删除光标字符, &#x5411;&#x540E;

删除 X

删除光标字符, &#x5411;&#x524D;

删除 dd

删除 &#x6574;&#x884C;

`d [删除] 在
编辑模式

下输入 ————————— ———————————–x

删除光标字符, &#x5411;&#x540E;

删除 X

删除光标字符, &#x5411;&#x524D;

删除 dd

删除 &#x6574;&#x884C;

删除光标 &#x540E;

的字符 d0

删除光标 &#x524D;

的字符 dG

删除 &#x5149;&#x6807;&#x81F3;&#x6587;&#x4EF6;&#x5C3E;

的字符 dgg

删除 &#x5149;&#x6807;&#x81F3;&#x6587;&#x4EF6;&#x9996;

的字符 n dd n

代表数字,代表向光标下删除多少行 [复制] 在
编辑模式

下输入 yy

复制整行 y$

复制光标 &#x540E;

的字符 y0

复制光标 &#x524D;

的字符 yG

复制 &#x5149;&#x6807;&#x81F3;&#x6587;&#x4EF6;&#x5C3E;

的字符 ygg

复制 &#x5149;&#x6807;&#x81F3;&#x6587;&#x4EF6;&#x9996;

的字符 n yy n

代表数字,代表向光标下复制多少行 ]y

指令快速将选定的文本 &#x590D;&#x5236;&#x5230;&#x7CFB;&#x7EDF;&#x526A;&#x8D34;&#x677F;

[粘贴] 在
编辑模式

下输入 p &#x540E;

粘贴 P &#x524D;

粘贴 ddp

剪切 &#x6574;&#x884C; &#x6CE8;&#xFF1A; 被删除的字符会在缓存内,可以粘贴删除的字符,相当于剪切 +p

将系统剪切板粘贴, 在写入模式下快捷键: Ctrl r + *p

将X11主剪切板粘贴 [恢复] 在
编辑模式

下输入 u

恢复上一次操作 Ctrl r

重做

通过在.vimrc中进行如下设置来启用持久性撤销。
:set undofile
不过,这会在系统中为每个被编辑过的文件保留一个撤销历史记录文件,显得有些混乱。也可以将这些文件保存在同一个目录中,配置如下所示。
为所有文件设置持久性撤销
set undofile
if !isdirectory("$HOME/.vim/undodir")
  call mkdir("$HOME/.vim/undodir", "p")
endif
set undodir="$HOME/.vim/undodir"

查询文件

[查找] 在
编辑模式

下输入 / &#x5B57;&#x7B26;&#x4E32; n

向下搜索, N

向上搜索 . &#x91CD;&#x590D;

上一次操作 *

查询相关单词, n

下一个, N

上一个 *nn

会遍历完所有的匹配项,从而跳回到本次查找的起点

可选模式

Vim的可视模式(visual mode)支持文本的任意选择(通常用于执行某些操作)。如果需要选择的文本不属于已定义的文本对象(单词、句子和段落等),则这个模式非常有用。进入可视模式有以下几种方式。

一旦进入可视模式,读者可以通过常用的移动命令来移动光标,从而扩展选择范围。

[选择文本] v

进入字符可视模式(状态栏标文本 --VISUAL-- V

进入行可视模式(状态栏标识文本 --VISUAL LINE-- Ctrl v

组合键进入块可视模式(状态栏标识文本 --VISUAL BLOCK-- gv

重选上次高亮选区

注释

根据语法注释,这里主要是批量注释。 Ctrl + v进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 //#,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。

取消注释: Ctrl + v进入块选择模式,选中你要删除的行首的注释符号,注意 //要选中两个,选好之后按 d即可删除注释, ESC 保存退出。

输入模式

[移动] 在输入模式操作 h

左移一列 l

右移一列 j

下移一列 k

上移一列

命令模式

[行号] 命令模式下输入 全称 set nu set number 打开行号 set nonu set nonumber 关闭行号

颜色

可以尝试其中一种配色主题,方法是输入:colorscheme,然后按Enter键;也可以在所有可用的配色主题之间循环切换,方法是输入:colorscheme,然后输入一个空格,并多次按Tab键。第7章中有更多关于Vim的配置和配色的介绍,届时读者可以拥有完全属于自己的Vim。

Vim 8自带如下主题配色。

[颜色] 命令模式下输入 blue darkblue default delek desert elflord evening industry koehler morning murhpy pablo peachpuff ron shine slate torte zellner

折叠

需要在.vimrc文件中将foldmethod设置为indent,设置代码如下。

set foldmethod=indent

不要忘记重新加载 ~/.vimrc,方法是重启Vim或在Vim中执行 :source $MYVIMRC命令。将foldmethod设置为自动类型(如indent)会默认将所有文件折叠。

输入 za可切换折叠状态(打开关闭的折叠或关闭打开的折叠)。输入 zRzM分别用于同时打开和关闭所有折叠。

设置折叠方式的方法为在 .vimrc文件中加入 set foldmethod=<折叠方法><!--折叠方法-->

  • manual:手动折叠,这种方法对于长文本而言并不适用。
  • indent:基于缩进的折叠,这对于依赖缩进的编程语言非常合适(不管哪种语言,标准的编码风格中总是会采用某种一致性的缩进。因此,当读者想要快速隐藏不关心的代码时,indent折叠方式不失为一种高效率的选择)。
  • expr:基于正则表达式的折叠。如果读者想要用复杂的规则来定义折叠,那么可以选择这种方式。
  • marker:使用文本中特殊的标记来定义折叠,比如{{{和}}}。这种方法对于管理很长的.vimrc文件非常有效,但是在Vim之外不常用,因为这种方式需要修改文件内容。
  • syntax提供了可识别语法的折叠,但它并非对所有语言都开箱即用(不支持Python)。
  • diff:当Vim处于diff模式时会自动采用这种折叠方式,diff模式下需要展示两个文件的不同之处,而相同之处往往需要隐藏起来

替换

: 1,$s/word1/word2/gc: %s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!,如果将命令后的c不写,则不需要用户确认。

打开

编辑一个目录时(如用 :e .命令打开当前目录),实际上打开的是 Netrw

通过Netrw,读者可以在工作区中看到所有的文件。虽然Netrw已经在顶部的状态栏中列出了几个常用的快捷键,但是下面的几个主要功能键还是需要了解一下。

命令 说明 Enter

用于打开文件和目录 -

进入上一层目录 D

删除一个文件或目录 R

重命名一个文件或目录 : edit .

打开文件管理,并显示当前目录,可缩写 : e . : Explore

打开文件管理,并显示活动缓冲区所在的目录

Netrw的窗口也可以在分割窗口或标签页中打开。

命令 说明 : Vex

以左右分割方式打开Netrw : Sex

以上下分割方式打开Netrw : Lex

以左右分割方式打开Netrw,当前Netrw窗口位于最左边,且高度占满整个屏幕 %

表示该缓冲区位于当前窗口中 a

表示该缓冲区处于活动状态,即它已被加载并可见 line 30

表示当前光标位置 : b 1

返还指定缓存文件。命令中的空格可以省略,得到简化版的命令:b1 1

为缓冲区编号,在整个Vim会话中,它的值保持不变 2

保存 3

退出 4

缓存区文件 5

多文件 6

组合文件 7

比较文件 8

资源管理器 "xxxxx"

“xxxx”为文件名

分屏

使用如下命令将窗口分割成两个,其中一个显示新的文件。

命令 说明 : split

file 上下分割, split命令可以简化为 : sp

. 或者快捷键: Crtl w s : vsplit

file 左右分割, :vs

是:vsplit的简化版. 或者快捷键: Crtl w v

切换

为了使光标能在不同窗口间移动,先按 Ctrl+ w组合键,然后输入一个方向键: hjkl中的一个或键盘方向键。

移动

窗口命令的快捷键都要先按 Ctrl+ w组合键,后面跟一个大写的方向键( HJKL中的一个),当前窗口会被移动到相应的位置。

命令 说明 Ctrl w w

组合键 在窗口之间 &#x5FAA;&#x73AF;&#x5207;&#x6362; Ctrl w H

组合键 将当前窗口 &#x79FB;&#x52A8;

到屏幕的 &#x6700;&#x5DE6;&#x8FB9; Ctrl w J

组合键 将当前窗口 &#x79FB;&#x52A8;

到屏幕的 &#x5E95;&#x90E8; Ctrl w K

组合键 将当前窗口 &#x79FB;&#x52A8;

到屏幕的 &#x9876;&#x90E8; Ctrl w L

组合键 将当前窗口 &#x79FB;&#x52A8;

到屏幕的 &#x6700;&#x53F3;&#x8FB9; Ctrl w =

组合键 使所有窗口 &#x7B49;&#x5BBD; &#x7B49;&#x9AD8; Ctrl w _

组合键 最大化活动窗口的 &#x9AD8;&#x5EA6; Ctrl w

,组合键 N Ctrl w _

组合键 把活动窗口的高度设为 N N Ctrl w

,组合键

使用 Ctrl+ w, r组合键将当前行或当前列(行优先于列)中的每个窗口的内容向右或向下移动。使用 Ctrl+ w, R组合键则以相反的方向执行类似的操作。

· 使用 Ctrl+ w, x组合键将当前窗口与下一个窗口的内容交换(如果当前窗口是最后一个,则与前一个交换)。

关闭

  • 使用 Ctrl+ w, q组合键关闭当前窗口。
  • 使用 : q命令关闭窗口并卸载缓冲区;不过,当只有一个窗口打开的时候,这会导致退出Vim。
  • 使用 Ctrl+ w, c组合键关闭活动窗口
  • 使用 : bd 命令删除当前缓冲区,并关闭当前窗口。
  • 使用 Ctrl + w, o合键(或 : only,或 : on命令)关闭除当前窗口之外的所有窗口。
  • 当打开了多个窗口时,可通过 : qa命令关闭所有窗口并退出。也可以结合 : w命令,即 : wqa,它会先保存所有打开的文件,再退出Vim。

终端

进入终端模式的命令如下。

进入终端模式的命令如下 : terminal : terminal

命令可简化为 : term

在Shell中执行程序 :! ls ls

是shell自带的程序,再按Enter键返回 :shell

进入shell, exit

返回, 或者 Ctrl d

批量修改
:%s/AAA/BBB/g  # 批量将AAA转换为 BBB

管理员写入

是不是经常会忘了使用sudo命令而重新配置文件, 而这个方法就是专门处理这个问题的.

:w !sudo tee % > /dev/null

tee程序将以 sudo权限运行,也就是说它拥有写/etc/hosts 文件的权限,在 Vim 命令行中,% 符号具有特殊含义。它会展开成当前文件的完整路径.

&#xFF1A;tee/&#x4F60;&#x7684;&#x6587;&#x4EF6; > /dev/null这条命令会把缓冲区的内容当作标准输入,并用它来覆盖 _你的文件_的内容。

批量插入

  1. Ctrl+ v, jj$
  2. A ;
  3. Esc

常用命令

packloadall 加载所有插件 silent! helptags ALL 为所有插件加载帮助文档 syntax on 支持语法高亮显示 filetype plugin indent on 启用根据文件类型自动缩进 set autoindent 开始新行时处理缩进 set expandtab 将制表符Tab展开为空格,这对于Python尤其有用 set tabstop=4 要计算的空格数 set shiftwidth=4 用于自动缩进的空格数 set backspace=2 在多数终端上修正退格键Backspace的行为 colorscheme murphy 修改配色 set nocompatible 与Vi不兼容 syntax on 语法高亮 set autoindent 沿用上一行缩进 set autoread 从磁盘自动重载文件 set backspace=indent,eol,start 现代编辑器的退格键行为 set belloff=all 禁用错误报警声 set cscopeverbose 详细输出cscope结果 set complete-=i 补全时,不要对当前被包含的文件进行扫描 set display=lastline,msgsep 显示更多消息文本 set encoding=utf-8 设置默认编码 set fillchars=vert:|,fold: 分隔字符 set formatoptions=tcqj 更直观的自动格式化 set fsync 调用fsync()实现更健壮的文件保存 set history=10000 最大的历史记录数 set hlsearch 搜索结果高亮显示 set incsearch 搜索时边输入边搜索、并移动光标 set langnoremap 避免出现映射崩溃的情况 set laststatus=2 总是显示状态栏 set listchars=tab:>\ ,trail:-,nbsp:+ :list时一些特殊字符的显示 set nrformats=bin,hex 对和的支持 set ruler 在状态栏角落里显示当前行位置信息 set sessionoptions-=options 不同会话不共享选项 set shortmess=F 文件信息少显示一些 set showcmd 在状态栏中显示最后一条命令 set viminfo+=! 为多个会话保存全局变量 set sessionoptions-=options 不同会话不共享选项 set tabpagemax=50 -p选项能够打开的最大数目的标签页 set tags=./tags;,tags 用于搜索标签的那些文件名 set ttimeoutlen=50 按键序列中等待下一个的时间,单位为毫秒 set ttyfast 要求实现快速的终端连接 set wildmenu 增强命令行补全功能

按键

命令的重映射。

Vim支持将某些键映射为其他键,:map和:noremap提供了这样的功能。

  • :map 用于递归映射。
  • :noremap 用于非递归映射。
  • :nmap和:nnoremap用于编辑模式。
  • :vmap和:vnoremap用于可视和选择模式。
  • :xmap和:xnoremap用于可视模式。
  • :smap和:snoremap用于选择模式。
  • :omap和:onoremap用于操作待决模式。
  • :map!和:noremap!用于写入和命令行模式。
  • :imap和:inoremap用于写入模式。
  • :cmap和:cnoremap用于命令行模式。

这意味着经:map重映射的命令可以识别自定义映射,而:noremap则针对系统默认映射。

决定创建一个新映射时,最好先确认一下此键或按键序列是否已经被映射为其他用途了。内置的按键绑定列表可通过:help index命令查看。而:map命令则可以查看插件和读者自定义的映射。比如,:map g将显示所有以g键开头的映射。

比如,在.vimrc文件中将按如下方式自定义映射。

如果想显式移除自定义或插件定义的映射,可使用:unmap命令。还有一个重要选项是:mapclear,它会将读者定义的映射和默认映射都清除掉。

你还可以在映射中使用特殊字符和命令,比如下列代码。

“noremap < Cu> :w ” 使用< Ctrlu>来保存文件(u表示更新)

上述例子中,表示 Ctrl+ u组合键。Vim中的 Ctrl修饰符表示为,其中为某个字符。其他修饰符键也用类似的方式表示。

· 或表示 Alt键加上某个键,比如表示 Alt+ b组合键。

·

注意,命令后面接表示回车( Enter键)。如果没有按Enter键,则命令虽然输入了,却不会被执行,读者会停留在命令行模式下(除非读者希望如此)。

另外,这里还列出一些可能用得上的特殊字符。

  • 表示空格。
  • 表示Esc键。
  • 和表示Enter键。
  • 表示制表符Tab键。
  • bs表示退格键。
  • 、、和表示箭头键。
  • 、表示上下翻页键。
  • ~表示12个功能键。
  • 、、和分别表示Home、Insert、Delete和End键。

你还可以将一个键映射为(无操作 no operation的缩写),表示这个键不起任何作用。有时候,读者希望习惯使用 hjkl风格的光标移动方式,而禁止自己使用箭头键,这个映射此时会派上用场。读者可以在 .vimrc中加入如下配置。

禁止箭头键功能,使自己习惯hjkl风格

  • map
  • map
  • map
  • *map

插图

Vim 常规教程
Vim 常规教程
Vim 常规教程
Vim 常规教程
Vim 常规教程
Vim 常规教程

相关连接

官网手册

Nvim 文档:帮助 (neovim.io)

VIM: [help] (sourceforge.net)

主页 | SpaceVim

Vimhelp_txt.pdf 提取码:GnTt

Original: https://www.cnblogs.com/xs-xs/p/16329125.html
Author: edolf
Title: Vim 常规教程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582652/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 每天一个 HTTP 状态码 204

    204 No Content 表示服务器成功地处理了客户端的请求,但是… 204 No Content 204 No Content 表示服务器成功地处理了客户端的请求…

    Linux 2023年6月7日
    099
  • Windows下的SSH Server

    (请注意,本文内容以杂谈为主,稍微提及了一些在MobaXterm中开启SSH Server可能遇到的情况和解决方法,没有多少干货,请酌情查看,谢谢) 最近比较无聊,使用MobaXt…

    Linux 2023年6月6日
    0104
  • 如何在 python 中解决 ImportError: DLL load failed while importing win32api

    问题描述 安装完 pywin32 之后,如果直接在代码中 import win32api 可能会报下述错误: ImportError: DLL load failed while …

    Linux 2023年6月7日
    085
  • Linux 下重启 PHP 服务、nginx 服务

    一、重启 PHP 服务 service php-fpm start 开启 service php-fpm stop 停止 service php-fpm restart 重启 二、…

    Linux 2023年6月13日
    082
  • shell 配置文件节约空间

    shell 配置文件节约空间 sed 读取一个配置文件的的多个变量 Original: https://www.cnblogs.com/hshy/p/16451927.htmlAu…

    Linux 2023年5月28日
    083
  • LeetCode-1047. 删除字符串中的所有相邻重复项

    题目来源 题目详情 给出由小写字母组成的字符串 S, 重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项…

    Linux 2023年6月7日
    0122
  • 惊了!修仙=编程??

    大家好,我是良许。 印象中,我们接触到的编程书籍都是这样的: 这样的书籍,去除阅读属性之后,还可以用来垫电脑屏幕、垫桌脚、盖泡面、砸产品经理,实乃居家、旅行、自卫必备神器! 这种书…

    Linux 2023年6月14日
    092
  • 分区表、文件系统等计算机基础知识

    开机固件 BIOS UEFI 特别老的BIOS不支持GPT分区 目前已取代BIOS 分区表类型 MBR GPT 1.不支持2TB以上的硬盘2.主分区不能超过4个3.可以通过建立扩展…

    Linux 2023年6月7日
    0101
  • 【Python】【爬虫】【问题解决方案记录】调试输出存在数据,print在控制台确丢失数据

    调试输出存在数据,print在控制台确丢失数据 如下图,调试可以看到数据是完整的 但是print输出的,恰好丢失了中间的一大堆数据。对,下图打问号的地方应该是小说才对。 看代码可能…

    Linux 2023年6月14日
    069
  • 没那么简单的单例模式

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 什么是单例 单例的应用场景 单…

    Linux 2023年6月6日
    0117
  • 初学ajax

    ajax出现无疑改变了web应用:从开始的整体页面的刷新到局部页面的数据显示,不用刷新页面就可以与服务器交互; 1 function ajaxPost(data){ 2 3 var…

    Linux 2023年6月14日
    086
  • Redis 全局通用命令整理

    转载请注明出处: 1.查看所有键 该命令会存在线程阻塞问题,keys 命令也可以通过正则匹配获取存在的缓存数据 Redis从2.8版本后,提供了一个新的命令scan,它能有效的解决…

    Linux 2023年5月28日
    096
  • VMware服务关闭后一定要重启

    重要的事情说三遍:服务暂时关闭记得重启,服务暂时关闭记得重启,服务暂时关闭记得重启!!! VMware服务由于安装补丁的需要我暂时把服务关闭了,于是我遇到了尴尬的一幕,于是乎发现上…

    Linux 2023年6月7日
    0120
  • linux学习记录

    查看所有系统服务 systemctl list-unit-files –type service -all 查看服务状态 sudo systemctl status servic…

    Linux 2023年6月7日
    081
  • 统计算法_探索性统计

    最近不知道写什么了,基本python的各种功能百度一下,都能搜到一大把,最近itchat好像很火,不过对这个不是很感冒,等以后有兴趣或者用的上的时候研究研究准备把统计方面的东西再看…

    Linux 2023年6月6日
    090
  • linux–文件系统

    才开始接触linux是这样: 这个是shell界面 根目录下的文件 : linux在路径中不使用盘符;采用的是虚拟目录(根目录’/’ 就是一个虚拟目录) ,…

    Linux 2023年6月14日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球