您的位置:首页 > 娱乐 > 明星 > it培训机构是真是假_平台已经维护6天了_商城网站开发公司_长春最专业的seo公司

it培训机构是真是假_平台已经维护6天了_商城网站开发公司_长春最专业的seo公司

2025/3/6 23:34:57 来源:https://blog.csdn.net/frgod/article/details/145717574  浏览:    关键词:it培训机构是真是假_平台已经维护6天了_商城网站开发公司_长春最专业的seo公司
it培训机构是真是假_平台已经维护6天了_商城网站开发公司_长春最专业的seo公司

最新版《Mastering Vim》封面,涵盖 Vim 9.0 版特性

【最新版《Mastering Vim》封面,涵盖 Vim 9.0 版特性】

文章目录

  • 第三章 追随最佳实践:插件管理之道
    • 1 插件的管理
    • 2 插件的手动加载
    • 3 packadd 命令的懒加载设置
    • 4 利用 Git 子模块更新插件
    • 5 其他插件管理工具简介
    • 6 插件运行慢的原因剖析
    • 7 Vim 中的不同模式
    • 8 Vim 命令的重新映射
    • 9 Leader 键的使用技巧
    • 10 插件的配置

写在前面
最近有事耽搁了,今天继续更新 Vim 的自学笔记。本篇为第三章核心知识点,主要介绍了 Vim 流行的插件管理方案、插件运行缓慢的性能分析方法以及重新映射快捷键方面的知识,可作为《Vim Masterclass》专栏相关内容的有益补充。

第三章 追随最佳实践:插件管理之道

本章概要

  • vim-plugVundlePathogenVim 原生的 package 包在插件管理中的应用;
  • 剖析插件运行缓慢的方法;
  • Vim 的主要模式(modes);
  • 探究重新映射命令的细节;
  • 引导键及其在各类自定义快捷键中的用途;
  • 插件配置和定制。

本章聚焦 Vim 插件管理,探讨了很多实用的管理技巧。


本章源码:https://github.com/PacktPublishing/Mastering-Vim-Second-Edition/tree/main/Chapter03

1 插件的管理

Vim 插件数量很多,安装到本地后需要统一管理。目前最流行的管理工具首推 vim-plug(https://github.com/junegunn/vim-plug)。

先删除上一章手动安装的所有插件,然后按下列方法操作,利用 vim-plug 工具实现一键安装、统一管理:

# 1. 删除本地手动安装的插件
$ pwd
/root/.vim/pack/plugins/start
$ rm -rf *
# 2. 修改 vimrc 文件
$ vim ~/.vimrc

.vimrc 文件中加入以下内容:

" Manage plugins with vim-plug.
call plug#begin()Plug 'scrooloose/nerdtree'
Plug 'tpope/vim-vinegar'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'mileszs/ack.vim'
Plug 'easymotion/vim-easymotion'call plug#end()

然后下载 vim-plug 工具文件:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.github.com/junegunn/vim-plug/master/plug.vim

最后打开 Vim,并执行命令 :PlugInsatll + Enter

图 3.1 使用 vim-plug 工具批量安装 Vim 插件实测效果图

【图 3.1 使用 vim-plug 工具批量安装 Vim 插件实测效果图】

注意:

  1. 配置到 Plug 后面的字符串,都是该插件 GitHub 仓库的 <username>/<repository> 部分;
  2. 统一安装::PlugInstall + Enter
  3. 统一更新::PlugUpdate + Enter
  4. 统一删除::PlugClean + Enter
  5. 升级 vim-plug 本身::PlugUpgrade + Enter

此外,还可以针对不同的插件做一些个性化的定制,例如:

" 1. load NERDTree when the :NERDTreeToggle command is called
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" 2. load goyo only for markdown
Plug 'junegunn/goyo.vim', { 'for': 'markdown' }

更多配置参数,详见其 GitHub 官方文档。

如果需要迁移 vimrc 文件,下列代码可以实现在新设备上自动安装相应的 Vim 插件:

" Download and install vim-plug (Linux, Mac, and Windows).
if empty(glob(\ '$HOME/' . (has('win32') ? 'vimfiles' : '.vim') .\ '/autoload/plug.vim'))execute '!curl -fLo ' .\ (has('win32') ? '\%USERPROFILE\%/vimfiles' : '$HOME/.vim') .\ '/autoload/plug.vim --create-dirs ' .\ 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

2 插件的手动加载

方法:将插件手动安装到 {packpath}/pack/<package_name>/opt/ 路径下,并执行命令 :packadd <plugin_name> 手动激活。

具体详见我的《Vim Masterclass》第 26 篇自学笔记。

3 packadd 命令的懒加载设置

可仿照下列形式在 vimrc 文件中进行懒加载配置:

" Load and run ack.vim plugin on :Ack command.
command! -nargs=* Ack :packadd ack.vim | Ack <f-args>
" Load an run Goyo plugin when opening Markdown files.
autocmd! filetype markdown packadd goyo.vim | Goyo

4 利用 Git 子模块更新插件

NERDTree 插件为例:

# 1. 初始化 Git 仓库
$ cd ~/.vim
$ git init
# 2. 将目标插件作为 Git 子模块引入
$ git submodule add https://github.com/scrooloose/nerdtree.git pack/plugins/start/nerdtree
$ git commit -am "Add NERDTree plugin"

需要更新插件时,执行 Git 命令:

$ git submodule update --recursive
$ git commit -am "Update plugins"

插件的删除使用:

$ git submodule deinit -f -- pack/plugins/start/nerdtree
$ rm -rf .git/modules/pack/plugins/start/nerdtree
$ git rm -f pack/plugins/start/nerdtree

5 其他插件管理工具简介

主要提到两种:

  • Vundlevim-plug 的前身,但没有 vim-plug 轻量。最大的不同在于提供了 :PluginSearch 命令,可在 Vim 中检索并试用需要的插件,但该特性自 2019 年就停止维护了,至今仍未恢复。具体详见 GitHub 仓库;
  • Pathogen:本质是一个 runtimepath 管理工具,不是专门的插件管理器。runtimepathVim 8.0 后式微,新用户已经很少了。具体详见 GitHub 仓库;

6 插件运行慢的原因剖析

Vim 支持性能参数日志记录,可以通过分析日志文件找出运行缓慢的原因。语法格式如下:

$ vim --startuptime startuptime.log
# 或者
$ gvim --startuptime startuptime.log

然后正常操作 Vim 一段时间,关闭后查看日志文件 startuptime.log 即可。

书中以 PythonGitHub 仓库为例,通过 CtrlP 插件给源码库建立索引来模拟影响性能的因素,演示了性能日志的创建及分析过程。

复制 Python 库到本地后,进入该项目目录;然后正常启动 Vim,并执行下列命令:

:profile start profile.log
:profile func *
:profile file *

接着按 Ctrl + P 命令触发 CtrlP 插件创建索引,然后退出 Vim,打开日志文件 profile.log(最后提前开启按缩进折叠 :set foldmethod=indent):

图 3.2 演示 Vim 性能日志及慢插件原因剖析过程

【图 3.2 演示 Vim 性能日志及慢插件原因剖析过程】

G 定位到日志末尾,找到最耗性能的函数:

图 3.3 在日志末尾定位执行缓慢的函数

【图 3.3 在日志末尾定位执行缓慢的函数】

接着全文检索 /32_GlobPath(仅供演示)查看单项性能数据,找到运行缓慢的原因:

图 3.4 定位存疑函数(SNR32_GlobPath)并查看性能参数详情,定位运行慢的具体原因

【图 3.4 定位存疑函数(SNR32_GlobPath)并查看性能参数详情,定位运行慢的具体原因】

7 Vim 中的不同模式

共分析了七大模式——

  1. Normal mode:正常模式;
  2. Command-line | ex mode:命令模式;
  3. Insert mode:插入模式下,使用 Ctrl-o 可以执行某个正常模式下的命令,然后重回插入模式;
  4. Replace | virtual replace mode:替换模式;
  5. Visual | Select mode:可视化模式、选择模式(较少使用);
  6. Terminal mode:终端模式,既可以水平拆分出一个窗口单独执行 shell 命令,也可以通过 :term <shell_command> 的形式在 Vim 内部执行一个 shell 命令;
  7. Operator-pending mode:操作符待令模式,即操作文本对象时指令输入过程中命令尚未触发执行的阶段。

其中,命令行模式的常见操作有:

  • Ctrl-f:调出历史命令列表;
  • Ctrl-p / Ctrl-n:历史命令的上下浏览,与上下方向键等效;
  • Ctrl-b / Ctrl-e:快速定位到命令行的起始、结尾位置;
  • ShiftLeft | RightCtrlLeft | Right:实现在命令行中按单词快速移动;

图 3.5 使用 Ctrl + f 调出历史命令列表

【图 3.5 使用 Ctrl + f 调出历史命令列表】

8 Vim 命令的重新映射

这部分内容可结合本人《Vim Masterclass》专栏 第 39 篇笔记 对照学习。

:map:noremap 的使用。前者可调用自定义的映射设置,后者仅限系统默认的映射设置。

也可以配置到 vimrc 文件:

noremap ; : " Use ; in addition to : to type commands.
noremap <c-u> :w<cr> " Save using <Ctrl-u> (u stands for update).

定制映射时可以限定生效范围:

  • :nmap:nnoremap:仅限正常模式生效;
  • :vmap:vnoremap :仅限可视化模式与选择模式生效;
  • :xmap:xnoremap :仅限可视模式生效;
  • :smap:snoremap :选择 select 选择模式生效;
  • :omap:onoremap :仅限操作符待令模式生效;
  • :map!:noremap! :仅对插入模式和命令行模式生效;
  • :imap:inoremap :仅对插入模式生效;
  • :cmap:cnoremap :仅对命令模式生效;

发散:输入引号时自动带出另一半引号

可通过 inoremap 映射轻松实现引号的成对自动补全(补全后可继续直接输入):

" Immediately add a closing quotes or braces in insert mode.
inoremap ' ''<esc>i
inoremap " ""<esc>i
inoremap ( ()<esc>i
inoremap { {}<esc>i
inoremap [ []<esc>i

9 Leader 键的使用技巧

Leader 键又叫引导键,默认为 \ 键,可通过 mapleader 进行修改:

" Map the leader key to a comma.
let mapleader = ','
" Map the leader key to a spacebar.
let mapleader = "\<space>"

上述定义中,将引导键设为空格键必须按第 4 行的写法来书写:

  • mapleader 不能直接出现特殊字符(如 space);
  • 必须使用双引号,转义符在单引号下无法正常转义;

实用案例:用 Leader 键 + W 自定义 :w + Enter 命令——

" Save a file with leader-w.
noremap <leader>w :w<cr>

再如:用 Leader 键 + N 自定义 :NERDTreeToggle 命令(用于切换 NERDTree 侧边栏的显示与隐藏):

noremap <leader>n :NERDTreeToggle<cr>

这样,每次想要切换 NERDTree 的显示与隐藏,就不用在命令模式输入 :NERDTreeToggle + Enter,直接在正常模式下输入 Space + N 即可,非常方便(假设 Leader 已变更为空格键)。

10 插件的配置

Vim 中的全局变量通常以 g: 为前缀,多用于配置插件的默认设置。例如,CtrlP 插件的默认当前工作路径可以设为当前 Git 项目的根目录:

let g:ctrlp_working_path_mode = 'ra'

这里的 g:ctrlp_working_path_mode 就是一个全局变量,通过 :h ctrlp + Enter 进入插件文档,可以学习更多类似变量。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com