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)

大家都在看

  • 输入输出函数

    IDLE name=input(‘输入’) print(name) print函数 print(1,2) print(1,2,sep=",") input函数 …

    Linux 2023年6月8日
    071
  • C语言:1~10阶乘的累加计算(循环方法不唯一)

    1~10阶乘的累加计算方法一 点击查看代码 int main() { int sum = 1, i, n; int ret = 0; for (n = 1; n <= 3; …

    Linux 2023年6月13日
    088
  • SpringBoot-JDBC

    SpringBoot-JDBC 8.1 SpringData简介 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都…

    Linux 2023年6月14日
    087
  • 【MQTT】阿里云搭建MQTT物联网平台通信

    MQTT环境搭建和测试 物联网环境搭建 MQTT.fx使用 物联网环境搭建 1.首先进入阿里云官网注册并登录你的账号。2.点击控制台。3.在产品与服务下面搜索物联网平台4.点击公共…

    Linux 2023年6月13日
    075
  • gem 更换源及目前能用的源

    1.查看gem源 gem source -l 2.删除源 gem source -r 3.添加源 gem sources –add Original: https://…

    Linux 2023年6月8日
    0102
  • 安装一些服务:termux奇门遁甲

    接下来就是开始服务了 作为最基础的ssh,连接肯定是用ssh了,不然总用use线去连接手机吧 首先要给手机一个ip地址,连接wifi的时候,可以的话就固定mac,静态ip地址 方法…

    Linux 2023年6月8日
    0113
  • AWS修改RDS时区

    查看 RDS 当前时区 默认情况下,AWS 的 RDS 采用的是 UTC 时间。而我们地区一般位于东八区,因此我们本地的时间是 UTC+8。 连接到 RDS 上,查询当前实例的时区…

    Linux 2023年6月7日
    089
  • Java类初始化顺序小结

    第一种情况(单一类) 测试结果 &#x9759;&#x6001;&#x53D8;&#x91CF; &#x9759;&#x6001;&…

    Linux 2023年6月7日
    092
  • Linux内核软中断

    1 软中断概述 软中断是实现中断下半部的一种手段,与2.5以前版本的下半段机制不同。软中断可以同时运行在不同的CPU上。 1.1 软中断的表示 内核中用结构体softirq_act…

    Linux 2023年6月7日
    077
  • ASP.NET Core 发布到Linux需要注意的地方

    ☆☆☆ 共同学习,欢迎拍砖;转载请注明出处,谢谢。欢迎关注我的公众号:闲聊编程。☆☆☆ Original: https://www.cnblogs.com/FlyLolo/p/11…

    Linux 2023年6月7日
    082
  • SpringCloud gateway自定义请求的 httpClient

    本文为博主原创,转载请注明出处: 引用 的 spring cloud gateway 的版本为 2.2.5 ; SpringCloud gateway 在实现服务路由并请求的具体过…

    Linux 2023年6月14日
    085
  • springboot整合redis的发布订阅模式

    所谓发布订阅模式,就是发布了消息丢到通道中,消费者进行消费 看代码: 1 首先需要配置这个连接工厂 ,这地方可能有人有疑问,为什么需要单独做一个类呢,是由与这个连接工厂其他地方需要…

    Linux 2023年5月28日
    091
  • Windows server 2012 安装exchange 2013

    一、实验环境 操作系统:Windows server 2012 R2 邮件系统版本:exchange 2013 安装的服务:AD CS、AD DS、IIS、DNS 二、安装exch…

    Linux 2023年6月7日
    0105
  • PyQt5的使用

    PyQt5 目录 Qt Designer PyQt5基本窗口控件(QMainWindow、Qwidget、Qlabel、QLineEdit、菜单、工具栏等) PyQt5高级组件(Q…

    Linux 2023年6月14日
    093
  • .NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework? 本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NE…

    Linux 2023年6月13日
    076
  • 模拟重装Kubernetes(k8s)集群:删除k8s集群然后重装

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

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