【vim技巧】使用vim编写代码的一些心得

在这里插入图片描述

从2015年开始在服务器上用vim也有这么久了,但是并没能高效地使用它.现在想系统地开始涉猎并反复练习vim的一些技巧,把折腾经历持续地在这篇博文里更新; ------2021/08/03

总的来说,高效文本操作可以分为:文本编辑、文本选取、文本复制粘贴、替换改写、可重复操作等等;

寄存器内容被存储在"~/.viminfo"中,在下次重启vim时仍会加载;

约定:如果有对应长命令,我只写出短命令;


文本编辑的七个好习惯

这是Vim作者Bram Moolenaar倡导的七个高效的编辑文本的习惯(衍生自"The 7 habits of highly effective people"):

  • 快速移动光标:文本编辑的多数时间都花费在浏览、检查错误或者找出你要进行编辑工作的正确位置, 输入新的内容或改变已有的内容倒在其次. 在文本中随意漫游是非常常见的操作. 所以高效编辑的第一要义是学习如何能够在文本中快速移动, 准确定位.
  • 不要两次键入同样的东西:最常见的事是你要把一个词改为另一个, 如果你要将整个文件里所有地方出现的这个词都换为另一个, 你可以考虑使用": s"命令, 如果你要有选择地进行更改, 而且最好在看了上下文之后再决定, 你可以使用 “*” 命令查找这个词的另一个匹配, 如果你决定要改, 那么使用"cw"使用改变这些词, 然后再用"n"命令到下一个匹配处使用"."重复上一个命令. "."命令重复上一次改变.
  • 立即纠正错误:打字时出现错误是在所难免的事,自动补全或者通过缩写功能来纠正是避免的好办法;
:abbr pn pinguin
:abbr MS Mandrake Software 
  • 经常多文件编辑:人们往往都不是只编辑一个文件. 通常有多个相关的文件. 可能要在单个地编辑文件后一次编辑几个文件. 或者同时编辑几个文件. 要进行高效的编辑就要充分利用编辑器一次编辑多个文件的功能.tag机制可被用于在多个文件间跳转. 通常的方法是为你正在做的项目生成一个tag文件. 之后就可以在这个项目的多个文件之间自由跳转, 发现函数定义, 结构, 类型定义typedef, 等等.
  • 学会组合使用多种工具:程序的功能组合起来就可产生强大的处理能力.Unix的哲学是使用独立的小程序, 每个小程序做一项专门的任务, 并且把它作好, 将它们的工作整合到一起来完成一个复杂的任务.
  • 用结构化的思想去理解文本:可能你经常要打交道的文本都有一些内在的结构. 只是不被当前可用的命令所支持而以, 你可能不得不要回头建立你自己的宏和脚本来操作这些文本. 这样做显然有些复杂.最简单的一个例子就是加速你的编辑-编译-修改的周期. Vim有它自己的":make" 命令, 该命令编译你的程序项目, 捕获编译的错误/警告并允许你直接跳转到引起这一错误/警告的程序行上去.
  • 坚持好的做法并养成习惯:不必学习一个编辑器所提供的所有命令. 那样只会浪费你的时间. 绝大多数人只需要学习其中的10-20%的命令就足以应付它们的工作了. 但是对每个人来说, 适合自己的命令集各各不同, 这需要你不时地回顾以往所做的事, 看看是不是可以自动完成一些重复的工作. 如果你只进行了一次某项特殊的操作, 并且没指望将来还要进行类似的操作, 就不要试着去琢磨它了.

全局技巧

:sav main.cpp // 文件另存为
:clo // 关闭当前窗口

文本浏览技巧

:Shift + w/b/e // 比存粹的w/b/e要快
:12gg // 移动12行
:Ctrl + b // 向上滚动一屏(相当于Page Up)
:Ctrl + f // 向下滚动一屏(相当于Page Down)

文本复制粘贴

:Ctrl + rx // 插入寄存器 x 的内容

可视化模式下:

:aw // 选择当前单词
:ab // 选择被()包裹的区域(含括号)

文本编辑

:ciw // 将光标所在的单词删除,然后进入插入模式

插件安装

所谓的"Vim 包"是一个包含一个或多个插件的目录,默认情况下,你的 Vim 设置包含在"~/.vim"中,这是 Vim 在启动时寻找插件的地方;当你启动 Vim 时,它首先处理你的.vimrc文件,然后扫描"/.vim"中的所有目录,查找包含在"pack/*/start"中的插件;默认情况下"/.vim"目录中没有这样的文件结构,设置存放包的路径为:

$ mkdir -p ~/.vim/pack/vendor/start
$ ls ~/.vim/pack/vendor/start
commentary  nerdtree

尝试安装NERDTree,vim-commentary:

$ git clone --depth 1  https://github.com/preservim/nerdtree.git  ~/.vim/pack/vendor/start/nerdtree
$ git clone https://github.com/tpope/vim-commentary.git ~/.vim/pack/vendor/start/commentary

安装vim-plug,Vundle(vim-plug may be installed by copying the .vim file manually because of the network problem):

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

最终的.vimrc配置文件如下:

call plug#begin()
call plug#end()

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'preservim/NERDTree'
Plugin 'tpope/vim-commentary' 
call vundle#end()
filetype plugin indent on

set tags=/Project_Reality/code_reading/cryptominisat-master/src/tags

简单地使用宏,注意不需要输入":",敲击"qa"开始录制宏到寄存器a,然后完成一系列操作,敲击"q"完成宏的录制;
重放阶段:“n@a”(其中n为重放的次数);
查看宏:":register a";

猜你喜欢

转载自blog.csdn.net/hanss2/article/details/119350609