Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【vim】文艺复兴·VIM使用指南·Day 2 #36

Open
WanderHuang opened this issue Mar 28, 2022 · 0 comments
Open

【vim】文艺复兴·VIM使用指南·Day 2 #36

WanderHuang opened this issue Mar 28, 2022 · 0 comments

Comments

@WanderHuang
Copy link
Owner

文艺复兴·VIM使用指南·Day 2

本章我们来学习一些更「高级」的概念

前置任务

上一文我们学习了如何快速使用vim做这些操作

  1. 打开文件
  2. 简单地移动光标
  3. 选择区域/输入内容
  4. 保存和关闭文件

现在,我们要一起来厘清一些基本的概念,这样后续的操作才会更加顺畅。

键位布局

你可能好奇为什么vim的键位设计是这样的,比如hjkl用来移动光标,Ctrl用来绑定映射,\用来做leader键,@用来调用宏...

直到你看到这块键盘...

Untitled

因为vi(vim作为vi的改进)的创造者Bill Joy键盘是这样的!

现在的键盘布局和他的是不一样的,但我们可以通过「改键」来实现操作的流畅性~

符号的含义

关于vim文档中使用到的符号,你可以通过**:h notation**来查看帮助文档中所使用的示例符号。

[]                    # 可选的
[count]               # 重复后续command的次数,比如5x,重复五次光标字符删除
["x]                  # "表示寄存器,x可选[a-zA-Z0-9#%]等字符,"a表示调用寄存器a
                      # :reg<Enter> 可以查看寄存器情况
                      # 寄存器存储了一些命令集合
{motion}              # motion表示一个光标操作
                      # w b j k 等都属于一个motion 可以和[count]结合 [count]{motion}
                      # 可以和操作结合 operator {motion} 比如删除操作db表示delete backwords,向后删除
<BS>                  # 输入删除键
<Space>               # 输入空格键
<Home>                # home键
<Enter>               # 按下回车键 vimrc文件中使用<CR>
<Tab>                 # 按下Tab键
<End>                 # end键
<C-a>                 # 按下Ctrl + A键
<S-a>                 # 按下Shift + A键
<M-a>                 # 按下Alt + A键 或者说Meta + A键
                      # 这个比较特殊,有的终端本身用到了meta,比如iterm,这时候就需要配置终端允许发送到界面内
                      # 建议不使用这个键位映射,不然多端可能要重新调试
<F1>-<F12>            # 按下F1...F12键
<Up>                  # 上
<Down>                # 下
<Left>                # 左
<Right>               # 右

vim day2 help-notation

注意事项

后续我们配置自己的vim时,有一些坑需要避免再踩

  1. vim不支持像Ctrl + Shift + A这种组合按键,只支持单命令按键Ctrl + A,Shift + A
  2. 但是像Shift + A和Meta + A这种组合很多终端(终端毕竟也是软件)有坑,会导致vim获取不到指令
  3. mac下的Command + A这种组合,被占用的可能性也很大
  4. 使用**:map :nmap :imap :vmap**等命令可以查看当前的键位映射,有时候我们映射的键位会有冲突,这个几个命令可以用于检查
  5. 综上所述尽量使用Ctrl作为映射
  6. 除了Ctrl之外,我们还有键(默认为backslash \)可以用,这个后续再讲。

vim day2 help-leader

寻找帮助

用任意一个产品,都要阅读它的帮助手册。比如vscode也是,很多人都不知道可以Ctrl+N/Ctrl+P来移动光标。我们要多使用vim的help。只需要**:h {TEXT}**就可以得到原生的帮助。

:h motion  # 第一章我们讲过了motion,可以试着自己看看
:h buffer  # buffer是vim处理文件缓存的方式
:h tab     # tab和浏览器、vscode的tab一样
:h window  # 窗口的概念 和窗口相关的是split,窗口分割
:h         # 当然可以打开整个帮助手册
:h z       # z命令帮助

vim day2 help-more

在帮助页面,可以使用**:syntax on**打开语法高亮,这样你可以快速找到那些带有链接的字符。找到链接后,有跳转方案可以让你浏览起来更顺畅

# 帮助文档是只读模式,不能使用vim的插入模式,在Normal模式下可以用的命令,在帮助页面也可以用
<C-]>      # Ctrl + ] 跳转进入链接页面
<C-o>      # Ctrl + o 跳转回到上一次的光标地址
<C-i>      # Ctrl + i 跳转回到执行<C-o>之前的光标地址

vim day2 help-jumps

命令和配置项

所有的配置项都可以通过**:options查看。配置项指的是你的软件配置,就像你使用word、typora等软件有个人偏好设置一样,vim也有自带的配置选项,这就是配置项。配置项使用:set**来配置

比如最常见的一些配置

:set number       # 显示行号
:set bg=dark      # 可选dark light |背景为dark模式
:set nocp         # 可选nocp cp    |非兼容(兼容vi)模式
:set shiftwidth=4 # 输入tab键入的空格个数,默认为8
:set filetype=javascript # 设置文件类型

vim day2 command-set

命令可以通过Terminal模式执行,比如**:set :h :syntax :filetype :map**

:syntax on                  # 开启语法高亮
:filetype on plugin indent  # 自动匹配文件类型
:h map                      # 打开map的帮助页面
:nmap                       # 直接执行一个命令,可以查看详情,比如这里是查看nmap配置
:e ~/.config/nvim/init.vim  # 打开init.vim文件

hints

在命令行中使用tab可以得到命令补全,命令可选参数可以通过唤醒提示

vim day2 command-colorscheme

配置你自己的编辑器

通过**:h usr_05可以看到vim配置文件的帮助手册。mac上nvim的配置文件地址为~/.config/nvim/init.vim** 你也可以使用下面的命令来得到配置地址

:echo stdpath('config')                    # 输出配置地址
:exe 'edit' stdpath('config').'/init.vim'  # 编辑配置文件

VimScript是一个脚本语言,我们之前在Terminal模式使用的命令,都是脚本语言的一个内置指令。比如

" VimScript使用"作为注释
set number          " 左侧显示行号

设置行号后,可以保存退出(:wq),再重新打开init.vim(vim init.vim),你会看到行号的出现。

我们来配置第一份配置

syntax on                    " 语法高亮
filetype plugin indent on    " 文件格式自动检测
colorscheme delek            " 主题色
set number                   " 显示行号
set rnu                      " 显示相对行号,凭个人喜好设置
set bg=dark                  " 黑色背景
set scrolloff=8              " 光标开始滚动的偏移行号(这样就不用在底部滚动)
set shiftwidth=4             " tab宽度

现在你的页面就有了色彩和定制的一些基础功能,不那么枯燥了。

vim day2 vimrc

键位映射

仅仅有一些简单的键位还不够支撑我们的需求,而且也不够「酷」。有组合键位之后,我们才能做更多的事情。

" 配置组合键的格式常用的有这些
:nm[ap] {lhs} {rhs}
:vm[ap] {lhs} {rhs}
:im[ap] {lhs} {rhs}
:cm[ap] {lhs} {rhs}
:tm[ap] {lhs} {rhs}

之前我们解释过了[x]表示可选的字符,这里解释一下其他的

  • nmap: normal模式下的映射
  • vmap: visual模式下的映射
  • imap: insert模式下的映射
  • cmap: command模式下的映射
  • tmap: terminal模式下的映射
  • {lhs} left hand side 左表达式
  • {rhs} right hand side 右表达式

我们来看几个例子,通过例子来认识一下。


nmap <F1> :h<CR>          " F1唤醒帮助
nmap <tab> V>             " 缩进单行
vmap <tab> >gv            " 缩进选中行 gv表示选中上一个选中的区域
nmap <leader>; A;<Esc>_   " 行末添加分号

最后一个例子,我们用到了,原生的键是****,如果键盘不好按,可以改成

let mapleader = " "       " 这里是设置mapleader的字符输入,因此空格字符表示<space>键

nmap <leader>h :h<CR>     " 打开帮助菜单

接下来你就可以使用一些简单的键位映射来处理快捷键的问题了。如果你感觉使用Ctrl键位不舒服,或者使用原生的leader键位不舒服,mac系统上可以调整你的键盘布局。键位映射也没有银弹,按自己最舒服的方式来就行了。

vim day2 map

总结

第二天,我们了解了这些内容

  1. vim帮助文档阅读
  2. vim键位映射
  3. vim配置文件设置
  4. leader键

第三天,我们要学习复制/搜索/redo/undo/跳转/跳转列表/多行编辑等稍微智能一点的编辑器功能

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant