写点什么

配置高效的 VIM 开发环境

  • 2018-12-04
  • 本文字数:2345 字

    阅读完需:约 8 分钟

配置高效的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:443266
用户头像

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

关注

评论 1 条评论

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

Hibernate多对多的关系映射,详解(代码

爱好编程进阶

Java 程序员 后端开发

手写一个持久化的Flutter会话管理器

岛上码农

flutter ios 安卓开发 跨平台开发 5月月更

网站开发进阶 (十一) 知识汇总

No Silver Bullet

二维码 标签 5月月更 打印 元素隐藏

拿了阿里、腾讯的offer的大佬给想进互联网大厂的程序员一个忠告

Java架构追梦

Java 阿里 程序员面试

docker安装与启动

爱好编程进阶

Java 程序员 后端开发

jackson学习之二:jackson-core

爱好编程进阶

Java 程序员 后端开发

网站开发进阶(十)页面嵌套

No Silver Bullet

jsp iframe 5月月更 页面嵌套 include

Git进阶系列 | 8. 用Reflog恢复丢失的提交

俞凡

git 最佳实践

26岁到来之际,我在阿里实现了年薪40W+的小目标

Java架构追梦

Java 后端开发 程序员面试

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

Java架构追梦

Java 架构师

Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档

Java架构追梦

Java 阿里 后端开发

Android音视频——相关概念

程思扬

音视频 音视频开发

HTTP 协议入门详解

爱好编程进阶

Java 程序员 后端开发

吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软

Java架构追梦

Java 程序员 后端开发

flume基本概念与操作实例(常用source)

爱好编程进阶

Java 程序员 后端开发

hive学习笔记之四:分区表

爱好编程进阶

Java 程序员 后端开发

Git进阶系列 | 7. Git中的Cherry-pick提交

俞凡

git

都说区块链可信,到底信了个啥?

亨利笔记

区块链

ElasticSearch 概述

爱好编程进阶

Java 程序员 后端开发

无聊科技正经事周刊(第5期):五一长假与虚拟旅行

潘大壮

程序员 周刊 科技 行业趋势 科技周刊

架构实战营模块三作业

哈啰–J

励志!一年时间,从小白到进入阿里核心部门,“他”的逆袭之路

Java架构追梦

Java 后端开发 程序员面试

Java 1045 快速排序

爱好编程进阶

Java 程序员 后端开发

java List、Object、String

爱好编程进阶

Java 程序员 后端开发

电阻电路的等效变换 (Ⅲ)

謓泽

5月月更

虎符交易所Hoo研究院|音乐NFT的路径在哪

区块链前沿News

NFT 虎符 Hoo 虎符交易所

Hive-0

爱好编程进阶

Java 程序员 后端开发

Java 1027 打印沙漏

爱好编程进阶

Java 程序员 后端开发

Android音视频——基础介绍

程思扬

音视频

Dubbo源码分析- 总体介绍与模块划分

爱好编程进阶

程序员 后端开发

DevOps系列之 —— DevOps概览(三)DevCloud HE2E DevOps 框架及其主要服务

若尘

DevOps 5月月更

配置高效的VIM开发环境_语言 & 开发_Girish Managoli_InfoQ精选文章