配置高效的VIM开发环境

2018 年 12 月 04 日

配置高效的VIM开发环境

vim 是一款功能强大的通用编辑器,它提供了一组丰富的命令,成为众多用户的编辑器首选。本文将介绍 vim 中默认未被启用但仍然十分有用的命令。虽然我们可以在每个 vim 会话中单独启用这些命令,但本文的目的是创建一个开箱即用的高效率开发环境,所以建议将这些命令配置在 vim 配置文件中。


在开始之前


这里讨论的命令或配置属于 vim 启动配置文件 vimrc,这个文件位于用户主目录中。可以按照以下说明在 vimrc 中设置命令:


(注意:在 Linux 上,vimrc 文件也被用于系统范围的配置,例如/etc/vimrc 或/etc/vim/vimrc。在本文中,我们只考虑存在于用户主目录中特定于用户的 vimrc。)


在 Linux 上:


  • 使用vi $HOME/.vimrc打开文件;

  • 将末尾给出的命令输入或复制/粘贴到文件中;

  • 保存并关闭(:wq)。


在 Windows 上:


  • 首先,安装gvim;

  • 打开gvim;

  • 单击Edit --> Startup settings,打开_vimrc文件;

  • 将末尾给出的命令输入或复制/粘贴到文件中;

  • 单击File --> Save。


现在让我们深入研究各个 vi 命令。这些命令可以分为以下几类:


  1. 缩进和Tab;

  2. 显示和格式化;

  3. 搜索;

  4. 浏览和滚动;

  5. 拼写;

  6. 杂项。


1. 缩进和 Tab


自动对齐文件中行的缩进:


set autoindent
复制代码


智能缩进使用了代码语法和样式来对齐:


set smartindent
复制代码


提示:vim 具有语言感知功能,并根据文件中所使用的编程语言提供了默认的设置,让工作更高效。有很多默认配置命令,包括 axs cindent、cinoptions、indentexpr 等,这里就不做进一步的介绍。syn 是一个有用的命令,用于显示或设置文件语法。


设置 Tab 的空格数量:


set tabstop=4
复制代码


设置“移位操作”(例如“>>”或“<<”)的空格数量:


set shiftwidth=4
复制代码


如果你更喜欢使用空格而不是制表符,那么在按下 Tab 键时将插入空格。对于依赖制表符而不是空格的语言(如 Python)这可能是个问题。对于这种情况,你可以根据文件类型来设置这个选项。


set expandtab
复制代码


2. 显示和格式化


要显示行号:


set number
复制代码



在文本超过最大宽度时换行:


set textwidth = 80
复制代码


根据距离右边的列数来换行:


set wrapmargin = 2
复制代码


在遍历文件时识别括弧的起始和结束位置:


set showmatch
复制代码



3. 搜索


在文件中高亮显示搜索关键词:


set hlsearch
复制代码



进行增量搜索:


set incsearch
复制代码



搜索时忽略大小写(很多用户选择不使用这个命令,不过可以在你认为有用时设置它):


set ignorecase
复制代码


在设置了 ignorecase 和 smartcase 并且搜索关键字包含大写字母时,搜索时不考虑 ignorecase:


set smartcase
复制代码


例如,如果文件中包含:


test


Test


当设置了 ignorecase 和 smartcase,搜索“test”会找到并突出显示 test 和 Test。搜索“Test”只突出显示或只找到第二 Test。


4. 浏览和滚动


为了获得更好的视觉体验,你可能更喜欢将光标放在中间的位置而不是第一行。设置下面的选项可以将光标位置设置为第 5 行。


set scrolloff = 5
复制代码


例如:


第一张图像的 scrolloff = 0,第二张图像的 scrolloff = 5。



提示:如果你设置了 nowrap,那么 set sidescrolloff 会非常有用。


在 vim 屏幕底部显示永久的状态栏,用于显示文件名、行号、列号等:


set laststatus = 2
复制代码



5. 拼写


vim 有一个内置的拼写检查器,在编辑文本和些代码时非常有用。vim 会识别文件类型并检查代码注释的拼写情况。可以使用以下命令打开英语拼写检查:


set spell spelllang = en_us
复制代码


6. 杂项


禁用备份文件:如果启用了这个选项,vim 将为上一次编辑创建备份。如果你不想要这个功能,请像下面那样将其禁用。备份文件的文件名末尾有个波浪号(~)。


set nobackup
复制代码


禁用交换文件:如果启用了这个选项,vim 会创建一个交换文件,直到你开始编辑文件。在发生崩溃或冲突时,交换文件用于恢复文件。交换文件是隐藏文件,以.开头,并以.swp 结尾。


set noswapfile
复制代码


假设你需要在同一个 vim 会话中编辑多个文件,并在它们之间切换。问题是,工作目录通常是你打开第一个文件的那个目录。所以,将工作目录自动切换到正在编辑的文件所在的目录是很有用的。可以启用这个选项:


set autochdir
复制代码


vim 维护了一个撤消历史记录,允许你撤消更改。默认情况下,历史记录只在文件打开时处于活动状态。vim 通过了一个非常好用的特性,即使在文件关闭后也可以维护撤消历史记录,这意味着即使在保存、关闭和重新打开文件后,你仍然可以撤消更改。撤消文件是隐藏文件,扩展名为.un~。


set undofile
复制代码


设置声音警报铃声(如果你试图滚动超过行尾,会发出警告):


set errorbells
复制代码


如果你愿意,还可以设置视觉警报:


set visualbell
复制代码


一些额外的 tips


vim 提供了长格式和短格式命令,都可用于设置或取消设置。


autoindent 命令的长格式:


set autoindent
复制代码


autoindent 命令的短格式:


set ai
复制代码


查看命令的当前设置,并且不改变当前的设置值,请在命令末尾添加问号:


set autoindent?
复制代码


要取消或关闭命令,在命令前面加上 no 前缀(对大部分命令适用):


set noautoindent
复制代码


可以只为一个文件设置命令,而不是全局。要做到这个,需要打开文件并输入冒号:,然后跟上 set 命令。这个配置只对当前文件编辑会话有效。



查看命令帮助:


:help autoindent
复制代码



注意:本文列出的命令针对 Linux 上 7.4 版本(2013 年 8 月 10 日)的 Vim 和 Windows 上 8.0 版本(2016 年 9 月 12 日)的 Vim 进行了测试。


备忘单


在 vimrc 文件中复制/粘贴这些命令:


" Indentation & Tabs
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
set smarttab
" Display & format
set number
set textwidth=80
set wrapmargin=2
set showmatch
" Search
set hlsearch
set incsearch
set ignorecase
set smartcase
" Browse & Scroll
set scrolloff=5
set laststatus=2
" Spell
set spell spelllang=en_us
" Miscellaneous
set nobackup
set noswapfile
set autochdir
set undofile
set visualbell
set errorbells
复制代码


英文原文:https://opensource.com/article/18/9/vi-editor-productivity-powerhouse


2018 年 12 月 04 日 10:441645
用户头像

发布了 731 篇内容, 共 356.1 次阅读, 收获喜欢 1806 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

新手村:MySQL 学习经验、资源的分享

多选参数

MySQL MySQL 高可用 MySQL优化

来了,来了,你们要的Nginx教程来了

Java旅途

nginx

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者社区

华为 算法 进化 华为云

PV与UV你的网站也可以

北漂码农有话说

【小白学YOLO】YOLOv3网络结构细致解析

华为云开发者社区

人工智能 网络 物体检测 华为云 网络层

计算机网络基础(八)---网络层-路由概述

书旅

计算机网络 网络协议 计算机基础 AS

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

Nginx PHP-FPM 架构设计 环境安装

架构训练营第七周作业

张锐

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

秒懂云通信:选云通信到底哪家强?

巨侠说

云通信 通信云

英特尔唐炯:竞争推动PC行业良性发展,促使英特尔前行

飞天鱼2017

技术​选型的艺术

YourBatman

技术选型 湖北

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

BIGO | Likee深度推荐模型的特征工程优化

InfoQ_3597a20b53cc

人工智能

百度人脸算法“飞速迭代”,多模态活体检测V3.1获银行卡检测中心增强级认证

百度大脑

人工智能 人脸识别 百度大脑

第7周总结:性能

慵秋

http请求压测工具

潜默闻雨

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者社区

Kubernetes 容器 边缘计算 容器技术 华为云

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

API网关——Kong实践分享

博云技术社区

云计算 容器 PaaS API

数据湖应用解析:Spark on Elasticsearch一致性问题

华为云开发者社区

大数据 spark elasticsearch 数据湖 华为云

第7周-作业1

seng man

架构感悟 7- 性能优化何为

旭东(Frank)

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

为啥Underlay才是容器网络的最佳落地选择

博云技术社区

云计算 容器 容器网络

原生Ingress灰度发布能力不够?我们是这么干的

博云技术社区

云计算 容器 云原生 PaaS

web压力性能测试

周冬辉

压力测试

web 性能压测工具

Z冰红茶

为什么我们要自主开发一个稳定可靠的容器网络

博云技术社区

云计算 PaaS fabric 容器云

配置高效的VIM开发环境-InfoQ