问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Vim编辑器入门教程:从历史到最新版Vim 9.1的安装与使用

创作时间:
作者:
@小白创作中心

Vim编辑器入门教程:从历史到最新版Vim 9.1的安装与使用

引用
CSDN
1.
https://blog.csdn.net/frgod/article/details/145560268

Vim是一款功能强大的文本编辑器,广泛应用于Linux和Unix系统中。本文将带你从零开始学习Vim的基础知识,包括其历史背景、模态编辑的特点,以及如何在WSL Ubuntu系统上安装最新版的Vim 9.1。此外,文章还将介绍一些实用的Vim使用技巧,帮助你快速上手这款强大的编辑器。

第一章 Vim 入门

1 Vim 简史


图 1.1 由 Teletype Corporation 出品的 ASR-33 电传打字机

20世纪中叶,电传打字机(teleprinter)的出现使得远程收发信息成为可能。由于当时只能逐行处理文本,因此出现了基于文本行的编辑工具ed(由Ken Thompson开发)和ex(由Bill Joy开发)。随着显示器的普及,文本编辑工具也得到了升级,功能更加强大。

1976年,Bill Joy推出了vi编辑器,实现了多行编辑功能。如今的vi其实是Vim简化版Vim-tiny的一个快捷方式(symlink)。

以下是Vim各版本的核心功能一览表:

主版本
年份
核心看点
1.0
1991
Bram Moolenaar为Amiga电脑发布Vi Imitation
2.0
1993
更名为Vi Improved正式发布
3.0
1994
支持多窗口
4.0
1996
支持图形界面(GUI)
5.0-5.8
1998 - 2001
新增语法高亮、脚本(scripting)和选择模式(select mode)
6.0-6.4
2001 - 2005
添加插件支持和fold折叠
7.0-7.4
2006 - 2013
拼写检查、代码自动补全、tag标签、分支历史和undo的持久化
8.0-8.2
2016 - 2019
大量优化、异步I/O支持、内置终端和弹窗
9.0
2022
引入新脚本语言(Vim9script)

想查看Vim 9.0的新功能,可以在命令模式下执行:

:help version9

2 模态 vs 非模态

主要区别在于对上下文语境的识别:

  • 支持模态的编辑器:同样的操作随上下文的不同而不同(智能机);
  • 不支持模态的编辑器:各操作一直是静态功能(直板机)。


图 1.2 模态界面之于非模态界面,就如同智能手机之于大多数传统手机的对比

3 Vim 9 的安装(WSL 版)

这一节详细介绍了在不同操作系统上安装Vim 9的方法。这里只展示在WSL Ubuntu v20.04环境下将Vim从v8.1升级到vim 9.1的具体步骤:

$ pwd
/root
# 安装 Unbuntu 构建依赖
$ sudo apt-get install make build-essential libncurses5-dev libncursesw5-dev --fix-missing
# 下载 ncurses 依赖:https://invisible-island.net/ncurses/#download_ncurses
$ cp /mnt/c/Users/ad/Desktop/ncurses.tar.gz .
$ tar -zxvf ncurses.tar.gz
$ cd ncurses-6.3
$ ./configure
$ make
$ sudo make install
# 从 GitHub 下载 Vim 的最新稳定版:https://github.com/vim/vim/tags(vim-9.1.1094.tar.gz)
$ cp /mnt/c/Users/ad/Desktop/vim-9.1.1094.tar.gz .
# 安装过程中一律点确认
$ tar -zxvf vim-9.1.1094.tar.gz
$ cd vim-9.1.1094
$ ./configure --prefix=/usr/local --with-features=huge --enable-python3interp
$ make
$ sudo make install

注意:

  • --prefix用于指定安装路径;
  • --with-feature是限定安装范围(按最完整版本安装);
  • --enable-python3interp是添加对Python3的语言支持。

安装完毕后,最好重启WSL,并输入vim+Enter进行确认。

4 创建示例文件

用Vim创建一个用于演示相关操作的Python文件spam.py

#!/usr/bin/python
import random
INGREDIENTS = ['egg', 'sausage', 'bacon', 'ham', 'crumpets', 'spam']
def prepare_menu_item(ingredient, with_spam=True):
    if with_spam:
        return 'spam ' + ingredient
    return ingredient
def main():
    print('Scene: A cafe. A man and his wife enter.')
    print('Man: Well, what\'ve you got?')
    menu = []
    for ingredient in INGREDIENTS:
        has_spam = random.choice([True, False])
        menu.append(prepare_menu_item(ingredient, with_spam=has_spam))
    print('Waitress: Well, there\'s', ', '.join(menu))
if __name__ == '__main__':
    main()

然后运行该程序:

$ python3 spam.py
$ Scene: A cafe. A man and his wife enter.
Man: Well, what've you got?
Waitress: Well, there's spam egg, spam sausage, bacon, ham, spam crumpets, spam
$

5 关于 .swp 交换文件

当Vim会话非正常关闭或远程服务器突然中断时,未及时保存变更的文件会生成一个.swp交换(swap的简写)文件,通常格式为<filename>.swp.<filename>.swp,并存放在目标文件的所在路径下。

想要自定义.swp文件存放的路径,可以通过directory选项实现(注意末尾为两个斜杠符,否则不生效):

set directory=%USERDATA%\.vim\swap//

若要完全禁用交换文件的生成,则可以在.vimrc中设置:

set noswapfile

6 Vim 光标浏览技巧

主要记住这张示意图:


图 1.3 Vim 光标浏览核心按键示意图

和此前专栏最大的不同,是对e命令和按段落浏览({和})的强调。eend of word的缩写,可快速定位到光标所在单词(word)的最后一个字符,与b命令相互呼应。

7 对 undo 与 redo 的持久化相关设置

Vim的undo历史列表并不是线性的。如果需要记得几天以前的历史操作,持久化设置就显得很有必要了:

set undofile

但是这样会在每个正在编辑的文件旁生成一个undo文件。此时可以用下列脚本将它们合并到一起:

" Set up persistent undo across all files.
set undofile
let my_undo_dir = expand('$HOME/.vim/undodir')
if !isdirectory(my_undo_dir))
  call mkdir(my_undo_dir, "p")
endif
set undodir=my_undo_dir

8 关于 Vim 帮助文档

Vim还内置了一个交互式的入门文档vimtutor,直接在Vim外运行命令vimtutor+Enter即可:


图 1.4 Vim 自带的交互式入门文档界面

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号