Skip to main content

增强 Vim 编辑器,提高编辑效率 | Linux 中国

编者注:标题和文章最初称呼的 vi 编辑器,现已更新为编辑器的正确名称:Vim
Vim 作为一款功能强大、选项丰富的编辑器,为许多用户所热爱。本文介绍了一些在 Vim 中默认未启用但实际非常有用的选项。虽然可以在每个 Vim 会话中单独启用,但为了创建一个开箱即用的高效编辑环境,还是建议在 Vim 的配置文件中配置这些命令。
开始前的准备
这里所说的选项或配置均位于用户主目录中的 Vim 启动配置文件 .vimrc。 按照下面的说明在 .vimrc 中设置选项:
(注意:vimrc 文件也用于 Linux 中的全局配置,如 /etc/vimrc 或 /etc/vim/vimrc。本文所说的 .vimrc 均是指位于用户主目录中的 .vimrc 文件。)
Linux 系统中:
◈ 用 Vim 打开 .vimrc 文件: vim ~/.vimrc
◈ 复制本文最后的 选项列表 粘贴到 .vimrc 文件
◈ 保存并关闭 (:wq)
(LCTT 译注:此处不建议使用 Vim 编辑 .vimrc 文件,因为很可能无法粘贴成功,可以选择 gedit 编辑器编辑 .vimrc 文件。)
Windows 系统中:
◈ 首先,安装 gvim[1]
◈ 打开 gvim
◈ 单击 “编辑” -> “启动设置”,打开 _vimrc 文件
◈ 复制本文最后的 “选项列表” 粘贴到 _vimrc 文件
◈ 单击 “文件” -> “保存”
(LCTT 译注:此处应注意不要使用 Windows 自带的记事本编辑该 _vimrc 文件,否则可能会因为行结束符不同而导致问题。)
下面,我们将深入研究提高 Vim 编辑效率的选项。主要分为以下几类:
1. 缩进 & 制表符
2. 显示 & 格式化
3. 搜索
4. 浏览 & 滚动
5. 拼写
6. 其他选项
1. 缩进 & 制表符
使 Vim 在创建新行的时候使用与上一行同样的缩进:
  1. set autoindent
创建新行时使用智能缩进,主要用于 C 语言一类的程序。通常,打开 smartindent 时也应该打开 autoindent
  1. set smartindent
注意:Vim 具有语言感知功能,且其默认设置可以基于文件中的编程语言来改变配置以提高效率。有许多默认的配置选项,包括 axs cindentcinoptionsindentexpr 等,没有在这里说明。 syn 是一个非常有用的命令,用于设置文件的语法以更改显示模式。
(LCTT 译注:这里的 syn 是指 syntax,可用于设置文件所用的编程语言,开启对应的语法高亮,以及执行自动事件 (autocmd)。)
设置文件里的制表符 (TAB) 的宽度(以空格的数量表示):
  1. set tabstop=4
设置移位操作 >> 或 << 的缩进长度(以空格的数量表示):
  1. set shiftwidth=4
如果你更喜欢在编辑文件时使用空格而不是制表符,设置以下选项可以使 Vim 在你按下 Tab键时用空格代替制表符。
  1. set expandtab
注意:这可能会导致依赖于制表符的 Python 等编程语言出现问题。这时,你可以根据文件类型设置该选项(请参考 autocmd)。
2. 显示 & 格式化
要在每行的前面显示行号:
  1. set number
要在文本行超过一定长度时自动换行:
  1. set textwidth=80
要根据从窗口右侧向左数的列数来自动换行:
  1. set wrapmargin=2
(LCTT 译注:如果 textwidth 选项不等于零,本选项无效。)
当光标遍历文件时经过括号时,高亮标识匹配的括号:
  1. set showmatch
3. 搜索
高亮搜索内容的所有匹配位置:
  1. set hlsearch
搜索过程中动态显示匹配内容:
  1. set incsearch
搜索时忽略大小写:
  1. set ignorecase
在打开 ignorecase 选项的条件下,搜索内容包含部分大写字符时,要使搜索大小写敏感:
  1. set smartcase
例如,如果文件内容是:
  1. test
  2. Test
当打开 ignorecase 和 smartcase 选项时,搜索 test 时的突出显示:
test
Test
搜索 Test 时的突出显示:
test
Test
4. 浏览 & 滚动
为获得更好的视觉体验,你可能希望将光标放在窗口中间而不是第一行,以下选项使光标距窗口上下保留 5 行。
  1. set scrolloff=5
一个例子:
第一张图中 scrolloff=0,第二张图中 scrolloff=5
提示:如果你没有设置选项 nowrap,那么设置 sidescrolloff 将非常有用。
在 Vim 窗口底部显示一个永久状态栏,可以显示文件名、行号和列号等内容:
  1. set laststatus=2
5. 拼写
Vim 有一个内置的拼写检查器,对于文本编辑和编码非常有用。Vim 可以识别文件类型并仅对代码中的注释进行拼写检查。使用下面的选项打开英语拼写检查:
  1. set spell spelllang=en_us
(LCTT 译注:中文、日文或其它东亚语字符通常会在打开拼写检查时被标为拼写错误,因为拼写检查不支持这些语种,可以在 spelllang 选项中加入 cjk 来忽略这些错误标注。)
6. 其他选项
禁止创建备份文件:启用此选项后,Vim 将在覆盖文件前创建一个备份,文件成功写入后保留该备份。如果不想保留该备份文件,可以按下面的方式关闭:
  1. set nobackup
禁止创建交换文件:启用此选项后,Vim 将在编辑该文件时创建一个交换文件。 交换文件用于在崩溃或发生使用冲突时恢复文件。交换文件是以 . 开头并以 .swp 结尾的隐藏文件。
  1. set noswapfile
如果需要在同一个 Vim 窗口中编辑多个文件并进行切换。默认情况下,工作目录是打开的第一个文件的目录。而将工作目录自动切换到正在编辑的文件的目录是非常有用的。要自动切换工作目录:
  1. set autochdir
Vim 自动维护编辑的历史记录,允许撤消更改。默认情况下,该历史记录仅在文件关闭之前有效。Vim 包含一个增强功能,使得即使在文件关闭后也可以维护撤消历史记录,这意味着即使在保存、关闭和重新打开文件后,也可以撤消之前的更改。历史记录文件是使用 .un~ 扩展名保存的隐藏文件。
  1. set undofile
错误信息响铃,只对错误信息起作用:
  1. set errorbells
如果你愿意,还可以设置错误视觉提示:
  1. set visualbell
惊喜
Vim 提供长格式和短格式命令,两种格式都可用于设置或取消选项配置。
autoindent 选项的长格式是:
  1. set autoindent
autoindent 选项的短格式是:
  1. set ai
要在不更改选项当前值的情况下查看其当前设置,可以在 Vim 的命令行上使用在末尾加上 ?的命令:
  1. set autoindent?
在大多数选项前加上 no 前缀可以取消或关闭选项:
  1. set noautoindent
可以为单独的文件配置选项,而不必修改全局配置文件。需要的话,请打开文件并输入 :,然后键入 set命令。这样的话,配置仅对当前的文件编辑会话有效。
使用命令行获取帮助:
  1. :help autoindent
注意:此处列出的命令仅对 Linux 上的 Vim 7.4 版本和 Windows 上的 Vim 8.0 版本进行了测试。
这些有用的命令肯定会增强您的 Vim 使用体验。你会推荐哪些其他有用的命令?
选项列表
复制该选项列表粘贴到 .vimrc 文件中:
  1. " Indentation & Tabs
  2. set autoindent
  3. set smartindent
  4. set tabstop=4
  5. set shiftwidth=4
  6. set expandtab
  7. set smarttab
  8. " Display & format
  9. set number
  10. set textwidth=80
  11. set wrapmargin=2
  12. set showmatch
  13. " Search
  14. set hlsearch
  15. set incsearch
  16. set ignorecase
  17. set smartcase
  18. " Browse & Scroll
  19. set scrolloff=5
  20. set laststatus=2
  21. " Spell
  22. set spell spelllang=en_us
  23. " Miscellaneous
  24. set nobackup
  25. set noswapfile
  26. set autochdir
  27. set undofile
  28. set visualbell
  29. set errorbells

Comments

Popular posts from this blog

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checking a shared sec

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into /opt/course/1/context_default_no_kubectl.sh , but without the use of k

标 题: 关于Daniel Guo 律师

发信人: q123452017 (水天一色), 信区: I140 标  题: 关于Daniel Guo 律师 关键字: Daniel Guo 发信站: BBS 未名空间站 (Thu Apr 26 02:11:35 2018, 美东) 这些是lz根据亲身经历在 Immigration版上发的帖以及一些关于Daniel Guo 律师的回 帖,希望大家不要被一些马甲帖广告帖所骗,慎重考虑选择律师。 WG 和Guo两家律师对比 1. fully refund的合约上的区别 wegreened家是case不过只要第二次没有file就可以fully refund。郭家是要两次case 没过才给refund,而且只要第二次pl draft好律师就可以不退任何律师费。 2. 回信速度 wegreened家一般24小时内回信。郭律师是在可以快速回复的时候才回复很快,对于需 要时间回复或者是不愿意给出确切答复的时候就回复的比较慢。 比如:lz问过郭律师他们律所在nsc区域最近eb1a的通过率,大家也知道nsc现在杀手如 云,但是郭律师过了两天只回复说让秘书update最近的case然后去网页上查,但是上面 并没有写明tsc还是nsc。 lz还问过郭律师关于准备ps (他要求的文件)的一些问题,模版上有的东西不是很清 楚,但是他一般就是把模版上的东西再copy一遍发过来。 3. 材料区别 (推荐信) 因为我只收到郭律师写的推荐信,所以可以比下两家推荐信 wegreened家推荐信写的比较长,而且每封推荐信会用不同的语气和风格,会包含lz写 的research summary里面的某个方面 郭家四封推荐信都是一个格式,一种语气,连地址,信的称呼都是一样的,怎么看四封 推荐信都是同一个人写出来的。套路基本都是第一段目的,第二段介绍推荐人,第三段 某篇或几篇文章的abstract,最后结论 4. 前期材料准备 wegreened家要按照他们的模版准备一个十几页的research summary。 郭律师在签约之前说的是只需要准备五页左右的summary,但是在lz签完约收到推荐信 ,郭律师又发来一个很长的ps要lz自己填,而且和pl的格式基本差不多。 总结下来,申请自己上心最重要。但是如果选律师,lz更倾向于wegreened,