mirror of
https://gitlab.com/wsdjeg/vim-galore-zh_cn.git
synced 2025-01-31 18:49:29 +08:00
Update readme
This commit is contained in:
parent
d07ae15d5f
commit
0b81f6f557
422
README.md
422
README.md
@ -25,122 +25,117 @@
|
|||||||
|
|
||||||
> Vim from zero to hero - Vim 从入门到精通
|
> Vim from zero to hero - Vim 从入门到精通
|
||||||
|
|
||||||
- 原文地址:https://github.com/mhinz/vim-galore
|
- 原文地址:<https://github.com/mhinz/vim-galore>
|
||||||
- 原文作者:Marco Hinz
|
- 原文作者:Marco Hinz
|
||||||
- 本文地址:https://github.com/wsdjeg/vim-galore-zh_cn
|
- 本文地址:<https://github.com/wsdjeg/vim-galore-zh_cn>
|
||||||
|
|
||||||
### [简介](#简介-1)
|
<!-- vim-markdown-toc GFM -->
|
||||||
|
|
||||||
- [什么是 Vim](#什么是-vim)
|
- [简介](#简介)
|
||||||
- [Vim 的哲学](#vim-的哲学)
|
- [什么是 Vim?](#什么是-vim)
|
||||||
- [入门步骤](#入门步骤)
|
- [Vim 哲学](#vim-哲学)
|
||||||
- [精简的 vimrc](#精简的-vimrc)
|
- [入门](#入门)
|
||||||
- [我正在使用的是什么样的 Vim](#我正在使用什么样的-vim)
|
- [精简的 vimrc](#精简的-vimrc)
|
||||||
- [备忘录](#备忘录)
|
- [我正在使用什么样的 Vim](#我正在使用什么样的-vim)
|
||||||
|
- [备忘录](#备忘录)
|
||||||
### [基础](#基础-1)
|
- [基础](#基础)
|
||||||
|
- [缓冲区,窗口,标签](#缓冲区窗口标签)
|
||||||
- [缓冲区,窗口,标签](#缓冲区窗口标签)
|
- [已激活、已载入、已列出、已命名的缓冲区](#已激活已载入已列出已命名的缓冲区)
|
||||||
- [当前缓冲区,加载缓冲区,缓冲区列表,命名缓冲区](#已激活已载入已列出已命名缓冲区)
|
- [参数列表](#参数列表)
|
||||||
- [参数列表](#参数列表)
|
- [按键映射](#按键映射)
|
||||||
- [按键映射](#按键映射)
|
- [映射前置键](#映射前置键)
|
||||||
- [映射占位符](#映射占位符)
|
- [寄存器](#寄存器)
|
||||||
- [寄存器](#寄存器)
|
- [范围](#范围)
|
||||||
- [范围](#范围)
|
- [标注](#标注)
|
||||||
- [标注](#标注)
|
- [补全](#补全)
|
||||||
- [补全](#补全)
|
- [动作,操作符,文本对象](#动作操作符文本对象)
|
||||||
- [动作,操作符,文本对象](#动作操作符文本对象)
|
- [自动命令](#自动命令)
|
||||||
- [自动命令](#自动命令)
|
- [变更历史,跳转历史](#变更历史跳转历史)
|
||||||
- [变更历史,跳转历史](#变更历史跳转历史)
|
- [内容变更历史记录](#内容变更历史记录)
|
||||||
- [内容变更历史记录](#内容变更历史记录)
|
- [全局位置信息表,局部位置信息表](#全局位置信息表局部位置信息表)
|
||||||
- [全局位置信息表,局部位置信息表](#全局位置信息表局部位置信息表)
|
- [宏](#宏)
|
||||||
- [宏](#宏)
|
- [颜色主题](#颜色主题)
|
||||||
- [颜色主题](#颜色主题)
|
- [折叠](#折叠)
|
||||||
- [折叠](#折叠)
|
- [会话](#会话)
|
||||||
- [会话](#会话)
|
- [局部化](#局部化)
|
||||||
- [局部化](#局部化)
|
- [用法](#用法)
|
||||||
|
- [获取离线帮助](#获取离线帮助)
|
||||||
### [用法](#用法-1)
|
- [获取离线帮助(补充)](#获取离线帮助补充)
|
||||||
|
- [获取在线帮助](#获取在线帮助)
|
||||||
- [获取离线帮助](#获取离线帮助)
|
- [执行自动命令](#执行自动命令)
|
||||||
- [获取离线帮助(补充)](#获取离线帮助补充)
|
|
||||||
- [获取在线帮助](#获取在线帮助)
|
|
||||||
- [执行自动命令](#执行自动命令)
|
|
||||||
- [用户自定义事件](#用户自定义事件)
|
- [用户自定义事件](#用户自定义事件)
|
||||||
- [内部自带事件](#内部自带事件)
|
- [内部自带事件](#内部自带事件)
|
||||||
- [剪切板](#剪切板)
|
- [剪切板](#剪切板)
|
||||||
- [剪贴板的使用 (Windows, OSX)](#剪贴板的使用windows-osx)
|
- [剪贴板的使用(Windows, OSX)](#剪贴板的使用windows-osx)
|
||||||
- [剪贴板的使用 (Linux, BSD, ...)](#剪贴板的使用linux-bsd-)
|
- [剪贴板的使用(Linux, BSD, ...)](#剪贴板的使用linux-bsd-)
|
||||||
- [打开文件时恢复光标位置](#打开文件时恢复光标位置)
|
- [打开文件时恢复光标位置](#打开文件时恢复光标位置)
|
||||||
- [备份文件,交换文件,撤销文件以及 viminfo 文件的处理](#备份文件交换文件撤销文件以及-viminfo-文件的处理)
|
- [备份文件,交换文件,撤销文件以及 viminfo 文件的处理](#备份文件交换文件撤销文件以及-viminfo-文件的处理)
|
||||||
- [编辑远程文件](#编辑远程文件)
|
- [编辑远程文件](#编辑远程文件)
|
||||||
- [插件管理](#插件管理)
|
- [插件管理](#插件管理)
|
||||||
- [多行编辑](#多行编辑)
|
- [多行编辑](#多行编辑)
|
||||||
- [使用外部程序和过滤器](#使用外部程序和过滤器)
|
- [使用外部程序和过滤器](#使用外部程序和过滤器)
|
||||||
- [MatchIt](#matchit)
|
- [Cscope](#cscope)
|
||||||
|
- [1. 构建数据库](#1-构建数据库)
|
||||||
|
- [2. 添加数据库](#2-添加数据库)
|
||||||
|
- [3. 查询数据库](#3-查询数据库)
|
||||||
|
- [MatchIt](#matchit)
|
||||||
|
- [在 Vim 8 中安装](#在-vim-8-中安装)
|
||||||
|
- [在 Vim 7 或者更早的版本中安装](#在-vim-7-或者更早的版本中安装)
|
||||||
|
- [简短的介绍](#简短的介绍)
|
||||||
|
- [技巧](#技巧)
|
||||||
|
- [聪明地使用 n 和 N](#聪明地使用-n-和-n)
|
||||||
|
- [聪明地使用命令行历史](#聪明地使用命令行历史)
|
||||||
|
- [智能 Ctrl-l](#智能-ctrl-l)
|
||||||
|
- [禁用错误报警声音和图标](#禁用错误报警声音和图标)
|
||||||
|
- [快速移动当前行](#快速移动当前行)
|
||||||
|
- [快速添加空行](#快速添加空行)
|
||||||
|
- [快速编辑自定义宏](#快速编辑自定义宏)
|
||||||
|
- [快速跳转到源(头)文件](#快速跳转到源头文件)
|
||||||
|
- [在 GUI 中快速改变字体大小](#在-gui-中快速改变字体大小)
|
||||||
|
- [根据模式改变光标类型](#根据模式改变光标类型)
|
||||||
|
- [防止水平滑动的时候失去选择](#防止水平滑动的时候失去选择)
|
||||||
|
- [重新载入保存文件](#重新载入保存文件)
|
||||||
|
- [更加智能的当前行高亮](#更加智能的当前行高亮)
|
||||||
|
- [更快的关键字补全](#更快的关键字补全)
|
||||||
|
- [改变颜色主题的默认外观](#改变颜色主题的默认外观)
|
||||||
|
- [命令](#命令)
|
||||||
|
- [:global 和 :vglobal - 在所有匹配行执行命令](#global-和-vglobal---在所有匹配行执行命令)
|
||||||
|
- [:normal 和 :execute - 脚本梦之队](#normal-和-execute---脚本梦之队)
|
||||||
|
- [:redir - 重定向消息](#redir---重定向消息)
|
||||||
|
- [调试](#调试)
|
||||||
|
- [常规建议](#常规建议)
|
||||||
|
- [查看启动日志](#查看启动日志)
|
||||||
|
- [查看运行时日志](#查看运行时日志)
|
||||||
|
- [调整日志等级](#调整日志等级)
|
||||||
|
- [vim 脚本调试](#vim-脚本调试)
|
||||||
|
- [语法文件调试](#语法文件调试)
|
||||||
|
- [杂项](#杂项)
|
||||||
|
- [附加资源](#附加资源)
|
||||||
|
- [Vim 配置集合](#vim-配置集合)
|
||||||
|
- [内置插件](#内置插件)
|
||||||
|
- [将 Control 映射到 CapsLock](#将-control-映射到-capslock)
|
||||||
|
- [复活节彩蛋](#复活节彩蛋)
|
||||||
|
- [为何使用 hjkl](#为何使用-hjkl)
|
||||||
|
- [常见问题](#常见问题)
|
||||||
|
- [编辑小文件时很慢](#编辑小文件时很慢)
|
||||||
|
- [编辑大文件的时候很慢](#编辑大文件的时候很慢)
|
||||||
|
- [持续粘贴(为什么我每次都要设置 'paste' 模式)](#持续粘贴为什么我每次都要设置-paste-模式)
|
||||||
|
- [在终端中按 ESC 后有延时](#在终端中按-esc-后有延时)
|
||||||
|
- [无法重复函数中执行的搜索](#无法重复函数中执行的搜索)
|
||||||
|
- [主题列表](#主题列表)
|
||||||
|
- [插件列表](#插件列表)
|
||||||
|
- [Neovim](#neovim)
|
||||||
|
- [加入我们](#加入我们)
|
||||||
|
- [致谢:](#致谢)
|
||||||
|
|
||||||
### [技巧](#技巧-1)
|
<!-- vim-markdown-toc -->
|
||||||
|
|
||||||
- [聪明地使用 n 和 N](#聪明地使用-n-和-n)
|
* * *
|
||||||
- [聪明地使用命令行历史](#聪明地使用命令行历史)
|
|
||||||
- [智能 Ctrl-l](#智能-ctrl-l)
|
|
||||||
- [禁用错误报警声音和图标](#禁用错误报警声音和图标)
|
|
||||||
- [快速移动当前行](#快速移动当前行)
|
|
||||||
- [快速添加空行](#快速添加空行)
|
|
||||||
- [快速编辑自定义宏](#快速编辑自定义宏)
|
|
||||||
- [快速跳转到源(头)文件](#快速跳转到源头文件)
|
|
||||||
- [在 GUI 中快速改变字体大小](#在-gui-中快速改变字体大小)
|
|
||||||
- [根据模式改变光标类型](#根据模式改变光标类型)
|
|
||||||
- [防止水平滑动的时候失去选择](#防止水平滑动的时候失去选择)
|
|
||||||
- [重新载入保存文件](#重新载入保存文件)
|
|
||||||
- [更加智能的当前行高亮](#更加智能的当前行高亮)
|
|
||||||
- [更快的关键字补全](#更快的关键字补全)
|
|
||||||
- [改变颜色主题的默认外观](#改变颜色主题的默认外观)
|
|
||||||
|
|
||||||
### [命令](#命令-1)
|
|
||||||
|
|
||||||
- [:global](#global---在所有匹配行执行命令) - 在所有匹配行执行命令
|
|
||||||
- [:normal and :execute](#normal-and-execute---脚本梦之队) - 脚本梦之队
|
|
||||||
- [:redir](#redir---重定向消息) - 重定向消息
|
|
||||||
|
|
||||||
### [调试](#调试-1)
|
|
||||||
|
|
||||||
- [常规建议](#常规建议)
|
|
||||||
- [查看启动日志](#查看启动日志)
|
|
||||||
- [查看运行时日志](#查看运行时日志)
|
|
||||||
- [调整日志等级](#调整日志等级)
|
|
||||||
- [Vim 脚本调试](#vim-脚本调试)
|
|
||||||
- [语法文件调试](#语法文件调试)
|
|
||||||
|
|
||||||
### [杂项](#杂项-1)
|
|
||||||
|
|
||||||
- [附加资源](#附加资源)
|
|
||||||
- [Vim 配置集合](#vim-配置集合)
|
|
||||||
- [内置插件](#内置插件)
|
|
||||||
- [将 Control 映射到 CapsLock](#将-control-映射到-capslock)
|
|
||||||
- [复活节彩蛋](#复活节彩蛋)
|
|
||||||
- [为何使用 hjkl](#为何使用-hjkl)
|
|
||||||
|
|
||||||
### [怪癖](#怪癖-1)
|
|
||||||
|
|
||||||
- [编辑小文件很慢](#编辑小文件很慢)
|
|
||||||
- [编辑大文件很慢](#编辑大文件很慢)
|
|
||||||
- [新行用于 NUL](#新行用于-nul)
|
|
||||||
- [相同部分粘贴 (要不为什么我总要设置‘粘贴’?)](#相同部分粘贴-要不为什么我总要设置粘贴)
|
|
||||||
- [在终端使用 Esc 延时](#在终端使用-esc-延时)
|
|
||||||
- [无法重复函数中执行的搜索](#无法重复函数中执行的搜索)
|
|
||||||
|
|
||||||
### [主题列表](#主题列表-1)
|
|
||||||
|
|
||||||
### [插件列表](content/plugins.md)
|
|
||||||
|
|
||||||
### [Neovim](content/neovim.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 简介
|
## 简介
|
||||||
|
|
||||||
### 什么是 Vim?
|
### 什么是 Vim?
|
||||||
|
|
||||||
[Vim](http://www.vim.org) 是一个历史悠久的文本编辑器,可以追溯到 [qed](https://en.wikipedia.org/wiki/QED_(text_editor))。[Bram
|
[Vim](http://www.vim.org) 是一个历史悠久的文本编辑器,可以追溯到 [qed](https://en.wikipedia.org/wiki/QED_(text_editor))。[Bram
|
||||||
Moolenaar](https://en.wikipedia.org/wiki/Bram_Moolenaar) 于 1991 年发布初始版本。
|
Moolenaar](https://en.wikipedia.org/wiki/Bram_Moolenaar) 于 1991 年发布初始版本。
|
||||||
|
|
||||||
@ -148,6 +143,8 @@ Moolenaar](https://en.wikipedia.org/wiki/Bram_Moolenaar) 于 1991 年发布初
|
|||||||
|
|
||||||
获取 Vim:用包管理器安装或者直接到 vim.org [下载](http://www.vim.org/download.php)。
|
获取 Vim:用包管理器安装或者直接到 vim.org [下载](http://www.vim.org/download.php)。
|
||||||
|
|
||||||
|
对于 Windows 用户,可以从 [我的网盘](https://share.weiyun.com/da2be5937ac0e2bd3abc26355fad1204) 下载。该版本可轻易添加 `python` 、`python3` 、`lua` 等支持,只需要安装 python、lua 即可。
|
||||||
|
|
||||||
讨论使用相关问题最好使用 [vim_use](https://groups.google.com/forum/#!forum/vim_use) 邮件列表或者使用 IRC([Freenode](https://freenode.net)) 的 `#vim` 频道。
|
讨论使用相关问题最好使用 [vim_use](https://groups.google.com/forum/#!forum/vim_use) 邮件列表或者使用 IRC([Freenode](https://freenode.net)) 的 `#vim` 频道。
|
||||||
|
|
||||||
欢迎加入我们的中文讨论群:[![QQ](https://img.shields.io/badge/QQ%e7%be%a4-121056965-blue.svg)](https://jq.qq.com/?_wv=1027&k=43DB6SG)
|
欢迎加入我们的中文讨论群:[![QQ](https://img.shields.io/badge/QQ%e7%be%a4-121056965-blue.svg)](https://jq.qq.com/?_wv=1027&k=43DB6SG)
|
||||||
@ -173,9 +170,7 @@ around paragraph_)。
|
|||||||
|
|
||||||
Vim 自带一个交互式的教程,内含你需要了解的最基础的信息,你可以通过终端运行以下命令打开教程:
|
Vim 自带一个交互式的教程,内含你需要了解的最基础的信息,你可以通过终端运行以下命令打开教程:
|
||||||
|
|
||||||
```
|
$ vimtutor
|
||||||
$ vimtutor
|
|
||||||
```
|
|
||||||
|
|
||||||
不要因为这个看上去很无聊而跳过,按照此教程多练习。你以前用的 IDE 或者其他编辑器很少是有“模式”概念的,因此一开始你会很难适应模式切换。但是你 Vim 使用的越多,[肌肉记忆](https://en.wikipedia.org/wiki/Muscle_memory) 将越容易形成。
|
不要因为这个看上去很无聊而跳过,按照此教程多练习。你以前用的 IDE 或者其他编辑器很少是有“模式”概念的,因此一开始你会很难适应模式切换。但是你 Vim 使用的越多,[肌肉记忆](https://en.wikipedia.org/wiki/Muscle_memory) 将越容易形成。
|
||||||
|
|
||||||
@ -234,11 +229,10 @@ endif
|
|||||||
|
|
||||||
相关帮助:
|
相关帮助:
|
||||||
|
|
||||||
```
|
:h :version
|
||||||
:h :version
|
:h feature-list
|
||||||
:h feature-list
|
:h +feature-list
|
||||||
:h +feature-list
|
:h has-patch
|
||||||
```
|
|
||||||
|
|
||||||
返回主目录 [:arrow_heading_up:](#简介)
|
返回主目录 [:arrow_heading_up:](#简介)
|
||||||
|
|
||||||
@ -246,11 +240,11 @@ endif
|
|||||||
|
|
||||||
为了避免版权问题,我只贴出链接:
|
为了避免版权问题,我只贴出链接:
|
||||||
|
|
||||||
- http://people.csail.mit.edu/vgod/vim/vim-cheat-sheet-en.png
|
- <http://people.csail.mit.edu/vgod/vim/vim-cheat-sheet-en.png>
|
||||||
- https://cdn.shopify.com/s/files/1/0165/4168/files/preview.png
|
- <https://cdn.shopify.com/s/files/1/0165/4168/files/preview.png>
|
||||||
- http://www.nathael.org/Data/vi-vim-cheat-sheet.svg
|
- <http://www.nathael.org/Data/vi-vim-cheat-sheet.svg>
|
||||||
- http://michael.peopleofhonoronly.com/vim/vim_cheat_sheet_for_programmers_screen.png
|
- <http://michael.peopleofhonoronly.com/vim/vim_cheat_sheet_for_programmers_screen.png>
|
||||||
- http://www.rosipov.com/images/posts/vim-movement-commands-cheatsheet.png
|
- <http://www.rosipov.com/images/posts/vim-movement-commands-cheatsheet.png>
|
||||||
|
|
||||||
或者在 Vim 中快速打开备忘录:[vim-cheat40](https://github.com/lifepillar/vim-cheat40)。
|
或者在 Vim 中快速打开备忘录:[vim-cheat40](https://github.com/lifepillar/vim-cheat40)。
|
||||||
|
|
||||||
@ -278,7 +272,7 @@ Vim 是一个文本编辑器。每次文本都是作为**缓冲区**的一部分
|
|||||||
|
|
||||||
返回主目录 [:arrow_heading_up:](#基础)
|
返回主目录 [:arrow_heading_up:](#基础)
|
||||||
|
|
||||||
## 已激活,已载入,已列出,已命名,缓冲区
|
## 已激活、已载入、已列出、已命名的缓冲区
|
||||||
|
|
||||||
用类似 `vim file1` 的命令启动 Vim 。这个文件的内容将会被加载到缓冲区中,你现在有一个**已载入的缓冲区**。如果你在 Vim 中保存这个文件,缓冲区内容将会被同步到磁盘上(写回文件中)。
|
用类似 `vim file1` 的命令启动 Vim 。这个文件的内容将会被加载到缓冲区中,你现在有一个**已载入的缓冲区**。如果你在 Vim 中保存这个文件,缓冲区内容将会被同步到磁盘上(写回文件中)。
|
||||||
|
|
||||||
@ -319,7 +313,7 @@ Vim 是一个文本编辑器。每次文本都是作为**缓冲区**的一部分
|
|||||||
使用 `:map` 命令家族你可以定义属于你自己的快捷键。该家族的每一个命令都限定在特定的模式下。从技术上来说 Vim 自带高达 12 中模式,其中 6 种可以被映射。另外一些命令作用于多种模式:
|
使用 `:map` 命令家族你可以定义属于你自己的快捷键。该家族的每一个命令都限定在特定的模式下。从技术上来说 Vim 自带高达 12 中模式,其中 6 种可以被映射。另外一些命令作用于多种模式:
|
||||||
|
|
||||||
| 递归 | 非递归 | 模式 |
|
| 递归 | 非递归 | 模式 |
|
||||||
|-----------|---------------|----------------------------------|
|
| --------- | ------------ | -------------------------------- |
|
||||||
| `:map` | `:noremap` | normal, visual, operator-pending |
|
| `:map` | `:noremap` | normal, visual, operator-pending |
|
||||||
| `:nmap` | `:nnoremap` | normal |
|
| `:nmap` | `:nnoremap` | normal |
|
||||||
| `:xmap` | `:xnoremap` | visual |
|
| `:xmap` | `:xnoremap` | visual |
|
||||||
@ -375,9 +369,9 @@ Vim 是一个文本编辑器。每次文本都是作为**缓冲区**的一部分
|
|||||||
|
|
||||||
返回主目录 [:arrow_heading_up:](#基础)
|
返回主目录 [:arrow_heading_up:](#基础)
|
||||||
|
|
||||||
## 映射占位符
|
## 映射前置键
|
||||||
|
|
||||||
映射占位符(Leader 键)本身就是一个按键映射,默认为 <kbd>\\</kbd>。我们可以通过在 `map` 中调用 `<leader>` 来为把它添加到其他按键映射中。
|
映射前置键(Leader 键)本身就是一个按键映射,默认为 <kbd>\\</kbd>。我们可以通过在 `map` 中调用 `<leader>` 来为把它添加到其他按键映射中。
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
nnoremap <leader>h :helpgrep<space>
|
nnoremap <leader>h :helpgrep<space>
|
||||||
@ -405,7 +399,7 @@ nnoremap <leader>h :helpgrep<space>
|
|||||||
Vim 为我们提供了如下的寄存器:
|
Vim 为我们提供了如下的寄存器:
|
||||||
|
|
||||||
| 类型 | 标识 | 读写者 | 是否为只读 | 包含的字符来源 |
|
| 类型 | 标识 | 读写者 | 是否为只读 | 包含的字符来源 |
|
||||||
| ---- | ---- | ------ | ---------- | -------------- |
|
| ------------------- | ------------------ | ------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| Unnamed | `"` | vim | 否 | 最近一次的复制或删除操作 (`d`, `c`, `s`, `x`, `y`) |
|
| Unnamed | `"` | vim | 否 | 最近一次的复制或删除操作 (`d`, `c`, `s`, `x`, `y`) |
|
||||||
| Numbered | `0`至`9` | vim | 否 | 寄存器 `0`: 最近一次复制。寄存器 `1`: 最近一次删除。寄存器 `2`: 倒数第二次删除,以此类推。对于寄存器 `1` 至 `9`,他们其实是只读的最多包含 9 个元素的队列。这里的队列即为数据类型 [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) |
|
| Numbered | `0`至`9` | vim | 否 | 寄存器 `0`: 最近一次复制。寄存器 `1`: 最近一次删除。寄存器 `2`: 倒数第二次删除,以此类推。对于寄存器 `1` 至 `9`,他们其实是只读的最多包含 9 个元素的队列。这里的队列即为数据类型 [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) |
|
||||||
| Small delete | `-` | vim | 否 | 最近一次行内删除 |
|
| Small delete | `-` | vim | 否 | 最近一次行内删除 |
|
||||||
@ -459,7 +453,7 @@ Vim 为我们提供了如下的寄存器:
|
|||||||
范围的使用是十分直观的。以下为一些例子(其中,`:d` 为 `:delete` 的缩写):
|
范围的使用是十分直观的。以下为一些例子(其中,`:d` 为 `:delete` 的缩写):
|
||||||
|
|
||||||
| 命令 | 操作的行 |
|
| 命令 | 操作的行 |
|
||||||
| ---- | -------- |
|
| ------------------- | ----------------------------------------------------------------- |
|
||||||
| `:d` | 当前行 |
|
| `:d` | 当前行 |
|
||||||
| `:.d` | 当前行 |
|
| `:.d` | 当前行 |
|
||||||
| `:1d` | 第一行 |
|
| `:1d` | 第一行 |
|
||||||
@ -503,33 +497,33 @@ Vim 为我们提供了如下的寄存器:
|
|||||||
你可以使用标注功能来标记一个位置,也就是记录文件某行的某个位置。
|
你可以使用标注功能来标记一个位置,也就是记录文件某行的某个位置。
|
||||||
|
|
||||||
| 标注 | 设置者 | 使用 |
|
| 标注 | 设置者 | 使用 |
|
||||||
| ---- | ------ | ---- |
|
| ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `a`-`z` | 用户 | 仅对当前的一个文件生效,也就意味着只可以在当前文件中跳转 |
|
| `a`-`z` | 用户 | 仅对当前的一个文件生效,也就意味着只可以在当前文件中跳转 |
|
||||||
| `A`-`Z` | 用户 | 全局标注,可以作用于不同文件。大写标注也称为「文件标注」。跳转时有可能会切换到另一个缓冲区 |
|
| `A`-`Z` | 用户 | 全局标注,可以作用于不同文件。大写标注也称为「文件标注」。跳转时有可能会切换到另一个缓冲区 |
|
||||||
| `0`-`9` | viminfo | `0` 代表 viminfo 最后一次被写入的位置。实际使用中,就代表 Vim 进程最后一次结束的位置。`1` 代表 Vim 进程倒数第二次结束的位置,以此类推 |
|
| `0`-`9` | viminfo | `0` 代表 viminfo 最后一次被写入的位置。实际使用中,就代表 Vim 进程最后一次结束的位置。`1` 代表 Vim 进程倒数第二次结束的位置,以此类推 |
|
||||||
|
|
||||||
如果想跳转到指定的标注,你可以先按下 `'`、`g'`、`\`` 或 `g\`` 然后按下标注名。
|
如果想跳转到指定的标注,你可以先按下 `'` / `g'` 或者 `` ` `` / `` g` `` 然后按下标注名。
|
||||||
|
|
||||||
如果你想定义当前文件中的标注,可以先按下 `m` 再按下标注名。比如,按下 `mm` 就可以把当前位置标注为 `m`。在这之后,如果你的光标切换到了文件的其他位置,只需要通过 `'m` 或者 `\`m` 即可回到刚才标注的行。区别在于,`'m` 会跳转回被标记行的第一个非空字符,而 `\`m` 会跳转回被标记行的被标记列。根据 viminfo 的设置,你可以在退出 Vim 的时候保留小写字符标注。请参阅 `:h viminfo-'` 来获取更多帮助。
|
如果你想定义当前文件中的标注,可以先按下 `m` 再按下标注名。比如,按下 `mm` 就可以把当前位置标注为 `m`。在这之后,如果你的光标切换到了文件的其他位置,只需要通过 `'m` 或者 `\`m`即可回到刚才标注的行。区别在于,`'m`会跳转回被标记行的第一个非空字符,而`\`m`会跳转回被标记行的被标记列。根据 viminfo 的设置,你可以在退出 Vim 的时候保留小写字符标注。请参阅`:h viminfo-'\` 来获取更多帮助。
|
||||||
|
|
||||||
如果你想定义全局的标注,可以先按下 `m` 再按下大写英文字符。比如,按下 `mM` 就可以把当前文件的当前位置标注为 `M`。在这之后,就算你切换到其他的缓冲区,依然可以通过 `'M` 或 `\`M` 跳转回来。
|
如果你想定义全局的标注,可以先按下 `m` 再按下大写英文字符。比如,按下 `mM` 就可以把当前文件的当前位置标注为 `M`。在这之后,就算你切换到其他的缓冲区,依然可以通过 `'M` 或 `\`M\` 跳转回来。
|
||||||
|
|
||||||
关于跳转,还有以下的方式:
|
关于跳转,还有以下的方式:
|
||||||
|
|
||||||
| 按键 | 跳转至 |
|
| 按键 | 跳转至 |
|
||||||
| ---- | ------ |
|
| --------------- | ---------------------------------------------- |
|
||||||
| `'[` 与 `` `[ `` | 上一次修改或复制的第一行或第一个字符 |
|
| `'[` 与 `` `[`` | 上一次修改或复制的第一行或第一个字符 |
|
||||||
| `']` 与 `` `] `` | 上一次修改或复制的最后一行或最后一个字符 |
|
| `']` 与 `` `]`` | 上一次修改或复制的最后一行或最后一个字符 |
|
||||||
| `'<` 与 `` `< `` | 上一次在可视模式下选取的第一行或第一个字符 |
|
| `'<` 与 `` `<`` | 上一次在可视模式下选取的第一行或第一个字符 |
|
||||||
| `'>` 与 `` `> `` | 上一次在可视模式下选取的最后一行或最后一个字符 |
|
| `'>` 与 `` `>`` | 上一次在可视模式下选取的最后一行或最后一个字符 |
|
||||||
| `''` 与 `` `' `` | 上一次跳转之前的光标位置 |
|
| `''` 与 `` `'`` | 上一次跳转之前的光标位置 |
|
||||||
| `'"` 与 `` `" `` | 上一次关闭当前缓冲区时的光标位置 |
|
| `'"` 与 `` `"`` | 上一次关闭当前缓冲区时的光标位置 |
|
||||||
| `'^` 与 `` `^ `` | 上一次插入字符后的光标位置 |
|
| `'^` 与 `` `^`` | 上一次插入字符后的光标位置 |
|
||||||
| `'.` 与 `` `. `` | 上一次修改文本后的光标位置 |
|
| `'.` 与 `` `.`` | 上一次修改文本后的光标位置 |
|
||||||
| `'(` 与 `` `( `` | 当前句子的开头 |
|
| `'(` 与 `` `(`` | 当前句子的开头 |
|
||||||
| `')` 与 `` `) `` | 当前句子的结尾 |
|
| `')` 与 `` `)`` | 当前句子的结尾 |
|
||||||
| `'{` 与 `` `{ `` | 当前段落的开头 |
|
| `'{` 与 `` `{`` | 当前段落的开头 |
|
||||||
| `'}` 与 `` `} `` | 当前段落的结尾 |
|
| `'}` 与 `` `}`` | 当前段落的结尾 |
|
||||||
|
|
||||||
标注也可以搭配 [范围](#范围) 一起使用。前面提到过,如果你在可视模式下选取一些文本,然后按下 `:`,这时候你会发现命令行已经被填充了 `:'<,'>`。对照上面的表格,现在你应该明白了,这段代表的就是可视模式下选取的范围。
|
标注也可以搭配 [范围](#范围) 一起使用。前面提到过,如果你在可视模式下选取一些文本,然后按下 `:`,这时候你会发现命令行已经被填充了 `:'<,'>`。对照上面的表格,现在你应该明白了,这段代表的就是可视模式下选取的范围。
|
||||||
|
|
||||||
@ -546,7 +540,7 @@ Vim 在插入模式中为我们提供了多种补全方案。如果有多个补
|
|||||||
针对不同的补全方案,Vim 为我们提供了不同的按键映射。这些映射都是在**插入模式中**通过 <kbd>Ctrl</kbd> + <kbd>x</kbd> 来触发:
|
针对不同的补全方案,Vim 为我们提供了不同的按键映射。这些映射都是在**插入模式中**通过 <kbd>Ctrl</kbd> + <kbd>x</kbd> 来触发:
|
||||||
|
|
||||||
| 映射 | 类型 | 帮助文档 |
|
| 映射 | 类型 | 帮助文档 |
|
||||||
| ---- | ---- | -------- |
|
| ------------ | ----------------------------------------------- | ---------- |
|
||||||
| `<c-x><c-l>` | 整行 | `:h i^x^l` |
|
| `<c-x><c-l>` | 整行 | `:h i^x^l` |
|
||||||
| `<c-x><c-n>` | 当前缓冲区中的关键字 | `:h i^x^n` |
|
| `<c-x><c-n>` | 当前缓冲区中的关键字 | `:h i^x^n` |
|
||||||
| `<c-x><c-k>` | 字典(请参阅 `:h 'dictionary'`)中的关键字 | `:h i^x^k` |
|
| `<c-x><c-k>` | 字典(请参阅 `:h 'dictionary'`)中的关键字 | `:h i^x^k` |
|
||||||
@ -567,6 +561,7 @@ Vim 在插入模式中为我们提供了多种补全方案。如果有多个补
|
|||||||
如果你想配置弹出菜单的行为,请一定要看一看 `:h 'completeopt'` 这篇帮助文档。默认的配置已经不错了,但我个人(原作者)更倾向于把 "noselect" 加上。
|
如果你想配置弹出菜单的行为,请一定要看一看 `:h 'completeopt'` 这篇帮助文档。默认的配置已经不错了,但我个人(原作者)更倾向于把 "noselect" 加上。
|
||||||
|
|
||||||
请参阅以下文档获取更多帮助:
|
请参阅以下文档获取更多帮助:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
:h ins-completion
|
:h ins-completion
|
||||||
:h popupmenu-keys
|
:h popupmenu-keys
|
||||||
@ -642,7 +637,7 @@ au BufNewFile,BufRead *.rb,*.rbw setf ruby
|
|||||||
Vim 中的跳转命令,包括 `'`、`` ` ``、`G`、`/`、`?`、`n`、`N`、`%`、`(`、`)`、`[[`、`]]`、`{`、`}`、`:s`、`:tag`、`L`、`M`、`H` 以及开始编辑一个新文件的命令。
|
Vim 中的跳转命令,包括 `'`、`` ` ``、`G`、`/`、`?`、`n`、`N`、`%`、`(`、`)`、`[[`、`]]`、`{`、`}`、`:s`、`:tag`、`L`、`M`、`H` 以及开始编辑一个新文件的命令。
|
||||||
|
|
||||||
| 列表 | 显示所有条目 | 跳转到上一个位置 | 跳转到下一个位置 |
|
| 列表 | 显示所有条目 | 跳转到上一个位置 | 跳转到下一个位置 |
|
||||||
| ---- | ------------ | ---------------- | ---------------- |
|
| -------- | ------------ | ---------------- | ---------------- |
|
||||||
| 跳转历史 | `:jumps` | `[count]<c-o>` | `[count]<c-i>` |
|
| 跳转历史 | `:jumps` | `[count]<c-o>` | `[count]<c-i>` |
|
||||||
| 变更历史 | `:changes` | `[count]g;` | `[count]g,` |
|
| 变更历史 | `:changes` | `[count]g;` | `[count]g,` |
|
||||||
|
|
||||||
@ -679,13 +674,11 @@ oquux<exc>
|
|||||||
|
|
||||||
那么现在,Vim 中会显示三行文本,分别是 "foo"、"bar" 和 "quux"。这时候,存储的树形结构如下:
|
那么现在,Vim 中会显示三行文本,分别是 "foo"、"bar" 和 "quux"。这时候,存储的树形结构如下:
|
||||||
|
|
||||||
```
|
|
||||||
foo(1)
|
foo(1)
|
||||||
/
|
/
|
||||||
bar(2)
|
bar(2)
|
||||||
/ \
|
/ \
|
||||||
baz(3) quux(4)
|
baz(3) quux(4)
|
||||||
```
|
|
||||||
|
|
||||||
这个树形结构共包含四次改动,括号中的数字就代表时间顺序。
|
这个树形结构共包含四次改动,括号中的数字就代表时间顺序。
|
||||||
|
|
||||||
@ -696,7 +689,7 @@ baz(3) quux(4)
|
|||||||
与之对应的是按时间遍历,对应的按键是 `g-` 和 `g+`。对于上面的例子,按下 `g-` 会首先回退到 "baz" 节点。再次按下 `g-` 会回退到 "bar" 节点。
|
与之对应的是按时间遍历,对应的按键是 `g-` 和 `g+`。对于上面的例子,按下 `g-` 会首先回退到 "baz" 节点。再次按下 `g-` 会回退到 "bar" 节点。
|
||||||
|
|
||||||
| 命令/按键 | 执行效果 |
|
| 命令/按键 | 执行效果 |
|
||||||
| --------- | -------- |
|
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `[count]u` 或 `:undo [count]` | 回退到 `[count]` 次改动之前 |
|
| `[count]u` 或 `:undo [count]` | 回退到 `[count]` 次改动之前 |
|
||||||
| `[count]<c-r>` 或 `:redo [count]` | 重做 `[count]` 次改动 |
|
| `[count]<c-r>` 或 `:redo [count]` | 重做 `[count]` 次改动 |
|
||||||
| `U` | 回退至最新的改动 |
|
| `U` | 回退至最新的改动 |
|
||||||
@ -729,7 +722,7 @@ Vim 中,全局位置信息表只能有一个,但每一个窗口都可以有
|
|||||||
以下为两者的操作比较:
|
以下为两者的操作比较:
|
||||||
|
|
||||||
| 动作 | 全局位置信息表 | 局部位置信息表 |
|
| 动作 | 全局位置信息表 | 局部位置信息表 |
|
||||||
| ---- | -------------- | -------------- |
|
| ------------ | -------------- | -------------- |
|
||||||
| 打开窗口 | `:copen` | `:lopen` |
|
| 打开窗口 | `:copen` | `:lopen` |
|
||||||
| 关闭窗口 | `:cclose` | `:lclose` |
|
| 关闭窗口 | `:cclose` | `:lclose` |
|
||||||
| 下一个条目 | `:cnext` | `:lnext` |
|
| 下一个条目 | `:cnext` | `:lnext` |
|
||||||
@ -841,7 +834,7 @@ q
|
|||||||
在 Vim 中,有以下 6 中折叠类型:
|
在 Vim 中,有以下 6 中折叠类型:
|
||||||
|
|
||||||
| 折叠方式 | 概述 |
|
| 折叠方式 | 概述 |
|
||||||
| -------- | ---- |
|
| -------- | ------------------------------------------ |
|
||||||
| diff | 在「比较窗口」中折叠未改变的文本 |
|
| diff | 在「比较窗口」中折叠未改变的文本 |
|
||||||
| expr | 使用 `'foldexpr'` 来创建新的折叠逻辑 |
|
| expr | 使用 `'foldexpr'` 来创建新的折叠逻辑 |
|
||||||
| indent | 基于缩进折叠 |
|
| indent | 基于缩进折叠 |
|
||||||
@ -887,7 +880,7 @@ q
|
|||||||
以上提到的很多概念,都有一个局部化(非全局)的版本:
|
以上提到的很多概念,都有一个局部化(非全局)的版本:
|
||||||
|
|
||||||
| 全局 | 局部 | 作用域 | 帮助文档 |
|
| 全局 | 局部 | 作用域 | 帮助文档 |
|
||||||
| ---- | ---- | ------ | -------- |
|
| ----------- | --------------------- | ------------ | --------------------- |
|
||||||
| `:set` | `:setlocal` | 缓冲区或窗口 | `:h local-options` |
|
| `:set` | `:setlocal` | 缓冲区或窗口 | `:h local-options` |
|
||||||
| `:map` | `:map <buffer>` | 缓冲区 | `:h :map-local` |
|
| `:map` | `:map <buffer>` | 缓冲区 | `:h :map-local` |
|
||||||
| `:autocmd` | `:autocmd * <buffer>` | 缓冲区 | `:h autocmd-buflocal` |
|
| `:autocmd` | `:autocmd * <buffer>` | 缓冲区 | `:h autocmd-buflocal` |
|
||||||
@ -906,9 +899,9 @@ Vim 自带了一套很完善的帮助文档,它们是一个个有固定排版
|
|||||||
|
|
||||||
一些关于帮助主题的简单规则:
|
一些关于帮助主题的简单规则:
|
||||||
|
|
||||||
* 用单引号把文本包起来表示选项,如:`:h 'textwidth'`
|
- 用单引号把文本包起来表示选项,如:`:h 'textwidth'`
|
||||||
* 以小括号结尾表示 VimL 函数,如:`:h reverse()`
|
- 以小括号结尾表示 VimL 函数,如:`:h reverse()`
|
||||||
* 以英文冒号开头表示命令,如:`:h :echo`
|
- 以英文冒号开头表示命令,如:`:h :echo`
|
||||||
|
|
||||||
使用快捷键 `<c-d>` (这是 <kbd>ctrl</kbd>+<kbd>d</kbd>)来列出所有包含你当前输入的内容的帮助主题。如:`:h tab<c-d>` 会列出所有包含 `tab` 主题,从 `softtabstop` 到 `setting-guitablabel` (译者注:根据安装的插件不同列出的选项也会不同)。
|
使用快捷键 `<c-d>` (这是 <kbd>ctrl</kbd>+<kbd>d</kbd>)来列出所有包含你当前输入的内容的帮助主题。如:`:h tab<c-d>` 会列出所有包含 `tab` 主题,从 `softtabstop` 到 `setting-guitablabel` (译者注:根据安装的插件不同列出的选项也会不同)。
|
||||||
|
|
||||||
@ -922,14 +915,13 @@ Vim 自带了一套很完善的帮助文档,它们是一个个有固定排版
|
|||||||
|
|
||||||
上面的命令会在所有的帮助文件中搜索“backwards”,然后跳转到第一个匹配的位置。所有的匹配位置都会被添加到全局位置信息表,用 `:cp / :cn` 可以在匹配位置之间进行切换。或者用 `:copen` 命令来打开全局位置信息表,将光标定位到你想要的位置,再按 回车就可以跳转到该匹配项。详细说明请参考 `:h quickfix`。
|
上面的命令会在所有的帮助文件中搜索“backwards”,然后跳转到第一个匹配的位置。所有的匹配位置都会被添加到全局位置信息表,用 `:cp / :cn` 可以在匹配位置之间进行切换。或者用 `:copen` 命令来打开全局位置信息表,将光标定位到你想要的位置,再按 回车就可以跳转到该匹配项。详细说明请参考 `:h quickfix`。
|
||||||
|
|
||||||
|
|
||||||
### 获取离线帮助(补充)
|
### 获取离线帮助(补充)
|
||||||
|
|
||||||
这个列表最初发表在 [vim_dev](https://groups.google.com/forum/#!forum/vim_dev),由 @chrisbra 编辑的,他是 Vim 开发人员中最活跃的一个。
|
这个列表最初发表在 [vim_dev](https://groups.google.com/forum/#!forum/vim_dev),由 @chrisbra 编辑的,他是 Vim 开发人员中最活跃的一个。
|
||||||
|
|
||||||
经过一些微小的改动后,重新发布到了这里。
|
经过一些微小的改动后,重新发布到了这里。
|
||||||
|
|
||||||
---
|
* * *
|
||||||
|
|
||||||
如果你知道你想要找什么,使用帮助系统的搜索会更简单一些,因为搜索出的主题都带有固定的格式。
|
如果你知道你想要找什么,使用帮助系统的搜索会更简单一些,因为搜索出的主题都带有固定的格式。
|
||||||
|
|
||||||
@ -955,7 +947,7 @@ Vim 自带了一套很完善的帮助文档,它们是一个个有固定排版
|
|||||||
|
|
||||||
8. 命令定义用 "command-" 开头,如用 `:h command-bar` 来查看自定义命令中'!'的作用。
|
8. 命令定义用 "command-" 开头,如用 `:h command-bar` 来查看自定义命令中'!'的作用。
|
||||||
|
|
||||||
9. 窗口管理类的命令是以 "CTRL-W" 开头的,所以你可以用 `:h CTRL-W_*` 来查找相应的帮助(译者注:'*'同样为占位符)(如:`:h CTRL-W_p` 查看切换到之前访问的窗口命令的解释)。如果你想找窗口处理的命令,还可以通过访问 `:h windows.txt` 并逐行向下浏览,所有窗口管理的命令都在这里了。
|
9. 窗口管理类的命令是以 "CTRL-W" 开头的,所以你可以用 `:h CTRL-W_*` 来查找相应的帮助(译者注:'\*'同样为占位符)(如:`:h CTRL-W_p` 查看切换到之前访问的窗口命令的解释)。如果你想找窗口处理的命令,还可以通过访问 `:h windows.txt` 并逐行向下浏览,所有窗口管理的命令都在这里了。
|
||||||
|
|
||||||
10. 执行类的命令以":"开头,即:`:h :s` 讲的是 ":s" 命令。
|
10. 执行类的命令以":"开头,即:`:h :s` 讲的是 ":s" 命令。
|
||||||
|
|
||||||
@ -983,22 +975,18 @@ Vim 自带了一套很完善的帮助文档,它们是一个个有固定排版
|
|||||||
|
|
||||||
22. 关于包含的语法文件的文档的帮助话题格式是 `:h ft-*-syntax`。如:`:h ft-c-syntax` 说的就是C语言语法文件以及它所提供的选项。有的语法文件还会带有自动完成(`:h ft-php-omni`)或文件类型插件(`:h ft-tex-plugin`)相关的章节可以查看。
|
22. 关于包含的语法文件的文档的帮助话题格式是 `:h ft-*-syntax`。如:`:h ft-c-syntax` 说的就是C语言语法文件以及它所提供的选项。有的语法文件还会带有自动完成(`:h ft-php-omni`)或文件类型插件(`:h ft-tex-plugin`)相关的章节可以查看。
|
||||||
|
|
||||||
|
|
||||||
另外在每个帮助页的顶端通常会包含一个用户文档链接(更多的从从用户的角度出发来主角命令的功能和用法,不涉及那么多细节)。如:`:h pattern.txt` 里包含了 `:h 03.9` 和 `:h usr_27` 两个章节的链接。
|
另外在每个帮助页的顶端通常会包含一个用户文档链接(更多的从从用户的角度出发来主角命令的功能和用法,不涉及那么多细节)。如:`:h pattern.txt` 里包含了 `:h 03.9` 和 `:h usr_27` 两个章节的链接。
|
||||||
|
|
||||||
|
|
||||||
### 获取在线帮助
|
### 获取在线帮助
|
||||||
|
|
||||||
如果你遇到了无法解决的问题,或者需要指引的话,可以参考 [Vim 使用](https://groups.google.com/forum/#!forum/vim_use)邮件列表。 [IRC](https://de.wikipedia.org/wiki/Internet_Relay_Chat) 也是一个很不错的资源。 [Freenode](https://freenode.net/) 上的 `#vim` 频道很庞大,并且里面有许多乐于助人的人。
|
如果你遇到了无法解决的问题,或者需要指引的话,可以参考 [Vim 使用](https://groups.google.com/forum/#!forum/vim_use)邮件列表。 [IRC](https://de.wikipedia.org/wiki/Internet_Relay_Chat) 也是一个很不错的资源。 [Freenode](https://freenode.net/) 上的 `#vim` 频道很庞大,并且里面有许多乐于助人的人。
|
||||||
|
|
||||||
如果你想给 Vim 提交 Bug 的话,可以使用 [vim_dev](https://groups.google.com/forum/#!forum/vim_dev) 邮件列表。
|
如果你想给 Vim 提交 Bug 的话,可以使用 [vim_dev](https://groups.google.com/forum/#!forum/vim_dev) 邮件列表。
|
||||||
|
|
||||||
|
|
||||||
### 执行自动命令
|
### 执行自动命令
|
||||||
|
|
||||||
你可以触发任何事件,如:`:doautocmd BufRead`。
|
你可以触发任何事件,如:`:doautocmd BufRead`。
|
||||||
|
|
||||||
|
|
||||||
#### 用户自定义事件
|
#### 用户自定义事件
|
||||||
|
|
||||||
对于插件而言,创建你自己的自定义事件有时非常有用。
|
对于插件而言,创建你自己的自定义事件有时非常有用。
|
||||||
@ -1029,7 +1017,6 @@ endif
|
|||||||
|
|
||||||
帮助文档:`:h User`
|
帮助文档:`:h User`
|
||||||
|
|
||||||
|
|
||||||
#### 内部自带事件
|
#### 内部自带事件
|
||||||
|
|
||||||
默认情况下,自动命令不能嵌套!如果某个自动命令执行了一个命令,这个命令再依次触发其它的事件,这是不可能的。
|
默认情况下,自动命令不能嵌套!如果某个自动命令执行了一个命令,这个命令再依次触发其它的事件,这是不可能的。
|
||||||
@ -1050,7 +1037,6 @@ autocmd VimEnter * nested edit $MYVIMRC
|
|||||||
|
|
||||||
帮助文档:`:h autocmd-nested`
|
帮助文档:`:h autocmd-nested`
|
||||||
|
|
||||||
|
|
||||||
### 剪切板
|
### 剪切板
|
||||||
|
|
||||||
如果你想在没有GUI支持的Unix系统中使用 Vim 的 `'clipboard'` 选项,则需要 `+clipboard` 以及可选的 `+xterm_clipboard` 两个[特性](#what-kind-of-vim-am-i-running)支持。
|
如果你想在没有GUI支持的Unix系统中使用 Vim 的 `'clipboard'` 选项,则需要 `+clipboard` 以及可选的 `+xterm_clipboard` 两个[特性](#what-kind-of-vim-am-i-running)支持。
|
||||||
@ -1110,18 +1096,16 @@ set guioptions+=a
|
|||||||
|
|
||||||
选择的工作工模大致是这样的:
|
选择的工作工模大致是这样的:
|
||||||
|
|
||||||
```
|
Program A:<ctrl+c>
|
||||||
Program A:<ctrl+c>
|
Program A:声称对 CLIPBOARD 的所有权
|
||||||
Program A:声称对 CLIPBOARD 的所有权
|
Program B:<ctrl+v>
|
||||||
Program B:<ctrl+v>
|
Program B:发现CLIPBOARD的所有权被Program A持有
|
||||||
Program B:发现CLIPBOARD的所有权被Program A持有
|
Program B:从Program A请求数据
|
||||||
Program B:从Program A请求数据
|
Program A:响应这个请求并发送数据给Program B
|
||||||
Program A:响应这个请求并发送数据给Program B
|
Program B:从Program A接收数据并插入到窗口中
|
||||||
Program B:从Program A接收数据并插入到窗口中
|
|
||||||
```
|
|
||||||
|
|
||||||
| 选择 | 何时使用 | 如何粘贴 | 如何在 Vim 中访问 |
|
| 选择 | 何时使用 | 如何粘贴 | 如何在 Vim 中访问 |
|
||||||
|--------|-------------------|-------------------|--------------------|
|
| --------- | --------------------- | ---------------------- | ----------------- |
|
||||||
| PRIMARY | 选择文本 | 鼠标中键, shift+insert | `*` 寄存器 |
|
| PRIMARY | 选择文本 | 鼠标中键, shift+insert | `*` 寄存器 |
|
||||||
| CLIPBOARD | 选择文本并按 `ctrl+c` | `ctrl+v` | `+`寄存器 |
|
| CLIPBOARD | 选择文本并按 `ctrl+c` | `ctrl+v` | `+`寄存器 |
|
||||||
|
|
||||||
@ -1183,7 +1167,6 @@ $ diff ~/.vim/vimrc ~/.vim/files/backup/vimrc-vimbackup
|
|||||||
|
|
||||||
帮助文档:`:h backup`
|
帮助文档:`:h backup`
|
||||||
|
|
||||||
|
|
||||||
**交换文件**:
|
**交换文件**:
|
||||||
|
|
||||||
假设你有一个非常棒的科幻小说的构思。在按照故事情节已经写了好几个小时几十万字的时候..忽然停电了!而那时你才想起来你上次保存 `~/来自外太空的邪恶入侵者.txt` 是在.. 好吧,你从来没有保存过。
|
假设你有一个非常棒的科幻小说的构思。在按照故事情节已经写了好几个小时几十万字的时候..忽然停电了!而那时你才想起来你上次保存 `~/来自外太空的邪恶入侵者.txt` 是在.. 好吧,你从来没有保存过。
|
||||||
@ -1196,14 +1179,12 @@ $ diff ~/.vim/vimrc ~/.vim/files/backup/vimrc-vimbackup
|
|||||||
|
|
||||||
帮助文档:`:h swap-file` 和 `:h usr_11`
|
帮助文档:`:h swap-file` 和 `:h usr_11`
|
||||||
|
|
||||||
|
|
||||||
**撤销文件**:
|
**撤销文件**:
|
||||||
|
|
||||||
[内容变更历史记录](#%E5%86%85%E5%AE%B9%E5%8F%98%E6%9B%B4%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95)是保存在内存中的,并且会在 Vim 退出时清空。如果你想让它持久化到磁盘中,可以设置 `:set undofile`。这会把文件 `~/foo.c` 的撤销文件保存在 `~/foo.c.un~`。
|
[内容变更历史记录](#%E5%86%85%E5%AE%B9%E5%8F%98%E6%9B%B4%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95)是保存在内存中的,并且会在 Vim 退出时清空。如果你想让它持久化到磁盘中,可以设置 `:set undofile`。这会把文件 `~/foo.c` 的撤销文件保存在 `~/foo.c.un~`。
|
||||||
|
|
||||||
帮助文档:`:h 'undofile'` 和 `:h undo-persistence`
|
帮助文档:`:h 'undofile'` 和 `:h undo-persistence`
|
||||||
|
|
||||||
|
|
||||||
**viminfo 文件**:
|
**viminfo 文件**:
|
||||||
|
|
||||||
备份文件、交换文件和撤销文件都是与文本状态相关的,而 viminfo 文件是用来保存在 Vim 退出时可能会丢失的其它的信息的。包括历史记录(命令历史、搜索历史、输入历史)、寄存器内容、标注、缓冲区列表、全局变量等等。
|
备份文件、交换文件和撤销文件都是与文本状态相关的,而 viminfo 文件是用来保存在 Vim 退出时可能会丢失的其它的信息的。包括历史记录(命令历史、搜索历史、输入历史)、寄存器内容、标注、缓冲区列表、全局变量等等。
|
||||||
@ -1212,7 +1193,7 @@ $ diff ~/.vim/vimrc ~/.vim/files/backup/vimrc-vimbackup
|
|||||||
|
|
||||||
帮助文档:`:h viminfo` 和 `:h 'viminfo'`
|
帮助文档:`:h viminfo` 和 `:h 'viminfo'`
|
||||||
|
|
||||||
---
|
* * *
|
||||||
|
|
||||||
如果你跟我一样,也喜欢把这些文件放到一个位置(如:`~/.vim/files`)的话,可以使用下面的配置:
|
如果你跟我一样,也喜欢把这些文件放到一个位置(如:`~/.vim/files`)的话,可以使用下面的配置:
|
||||||
|
|
||||||
@ -1238,7 +1219,6 @@ endif
|
|||||||
|
|
||||||
注意:如果你在一个多用户系统中编辑某个文件时, Vim 提示你交换文件已经存在的话,可能是因为有其他的用户此时正在编辑这个文件。而如果将交换文件放到自己的home目录的话,这个功能就失效了。
|
注意:如果你在一个多用户系统中编辑某个文件时, Vim 提示你交换文件已经存在的话,可能是因为有其他的用户此时正在编辑这个文件。而如果将交换文件放到自己的home目录的话,这个功能就失效了。
|
||||||
|
|
||||||
|
|
||||||
### 编辑远程文件
|
### 编辑远程文件
|
||||||
|
|
||||||
Vim 自带的 netrw 插件支持对远程文件的编辑。实际上它将远程的文件通过 scp 复制到本地的临时文件中,再用那个文件打开一个缓冲区,然后在保存时把文件再复制回远程位置。
|
Vim 自带的 netrw 插件支持对远程文件的编辑。实际上它将远程的文件通过 scp 复制到本地的临时文件中,再用那个文件打开一个缓冲区,然后在保存时把文件再复制回远程位置。
|
||||||
@ -1251,12 +1231,10 @@ Vim 自带的 netrw 插件支持对远程文件的编辑。实际上它将远程
|
|||||||
|
|
||||||
如果你已经设置了 `~/.ssh/config`,SSH 会自动读取这里的配置:
|
如果你已经设置了 `~/.ssh/config`,SSH 会自动读取这里的配置:
|
||||||
|
|
||||||
```
|
Host awesome
|
||||||
Host awesome
|
|
||||||
HostName awesome.site.com
|
HostName awesome.site.com
|
||||||
Port 1234
|
Port 1234
|
||||||
User bram
|
User bram
|
||||||
```
|
|
||||||
|
|
||||||
如果你的 `~/.ssh/config` 中有以上的内容,那么下面的命令就可以正常执行了:
|
如果你的 `~/.ssh/config` 中有以上的内容,那么下面的命令就可以正常执行了:
|
||||||
|
|
||||||
@ -1268,22 +1246,20 @@ Host awesome
|
|||||||
|
|
||||||
确保你已经看过了 `:h netrw-ssh-hack` 和 `:h g:netrw_ssh_cmd`。
|
确保你已经看过了 `:h netrw-ssh-hack` 和 `:h g:netrw_ssh_cmd`。
|
||||||
|
|
||||||
---
|
* * *
|
||||||
|
|
||||||
另外一种编辑远程文件的方法是使用 [sshfs](https://wiki.archlinux.org/index.php/Sshfs),它会用 [FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) 来挂载远程的文件系统到你本地的系统当中。
|
另外一种编辑远程文件的方法是使用 [sshfs](https://wiki.archlinux.org/index.php/Sshfs),它会用 [FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) 来挂载远程的文件系统到你本地的系统当中。
|
||||||
|
|
||||||
|
|
||||||
### 插件管理
|
### 插件管理
|
||||||
|
|
||||||
[Pathogen](https://github.com/tpope/vim-pathogen)是第一个比较流行的插件管理工具。实际上它只是修改了 _runtimepath_ (`:h 'rtp'`) 来引入所有放到该目录下的文件。你需要自己克隆插件的代码仓库到那个目录。
|
[Pathogen](https://github.com/tpope/vim-pathogen)是第一个比较流行的插件管理工具。实际上它只是修改了 _runtimepath_ (`:h 'rtp'`) 来引入所有放到该目录下的文件。你需要自己克隆插件的代码仓库到那个目录。
|
||||||
|
|
||||||
真正的插件管理工具会在 Vim 中提供帮助你安装或更新插件的命令。以下是一些常用的插件管理工具:
|
真正的插件管理工具会在 Vim 中提供帮助你安装或更新插件的命令。以下是一些常用的插件管理工具:
|
||||||
|
|
||||||
* [dein](https://github.com/Shougo/dein.vim)
|
- [dein](https://github.com/Shougo/dein.vim)
|
||||||
* [plug](https://github.com/junegunn/vim-plug)
|
- [plug](https://github.com/junegunn/vim-plug)
|
||||||
* [vim-addon-manager](https://github.com/MarcWeber/vim-addon-manager)
|
- [vim-addon-manager](https://github.com/MarcWeber/vim-addon-manager)
|
||||||
* [vundle](https://github.com/VundleVim/Vundle.vim)
|
- [vundle](https://github.com/VundleVim/Vundle.vim)
|
||||||
|
|
||||||
|
|
||||||
### 多行编辑
|
### 多行编辑
|
||||||
|
|
||||||
@ -1342,17 +1318,16 @@ set virtualedit=all
|
|||||||
|
|
||||||
鉴于Tag文件只是知道某个符号是在哪里定义的,cscope的数据库里的数据信息就多的多了:
|
鉴于Tag文件只是知道某个符号是在哪里定义的,cscope的数据库里的数据信息就多的多了:
|
||||||
|
|
||||||
* 符号是在哪里定义的?
|
- 符号是在哪里定义的?
|
||||||
* 符号是在哪里被使用的?
|
- 符号是在哪里被使用的?
|
||||||
* 这个全局符号定义了什么?
|
- 这个全局符号定义了什么?
|
||||||
* 这个变量是在哪里被赋值的?
|
- 这个变量是在哪里被赋值的?
|
||||||
* 这个函数在源文件的哪个位置?
|
- 这个函数在源文件的哪个位置?
|
||||||
* 哪些函数调用了这个函数?
|
- 哪些函数调用了这个函数?
|
||||||
* 这个函数调用了哪些函数?
|
- 这个函数调用了哪些函数?
|
||||||
* "out of space"消息是从哪来的?
|
- "out of space"消息是从哪来的?
|
||||||
* 在目录结构中当前的源文件在哪个位置?
|
- 在目录结构中当前的源文件在哪个位置?
|
||||||
* 哪些文件引用了这个头文件?
|
- 哪些文件引用了这个头文件?
|
||||||
|
|
||||||
|
|
||||||
#### 1. 构建数据库
|
#### 1. 构建数据库
|
||||||
|
|
||||||
@ -1387,7 +1362,6 @@ $ cscope -bq
|
|||||||
|
|
||||||
(当然你可以添加多个连接。)
|
(当然你可以添加多个连接。)
|
||||||
|
|
||||||
|
|
||||||
#### 3. 查询数据库
|
#### 3. 查询数据库
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
@ -1397,7 +1371,7 @@ $ cscope -bq
|
|||||||
如:`:cs find d foo` 会列出 `foo(...)` 调用的所有函数。
|
如:`:cs find d foo` 会列出 `foo(...)` 调用的所有函数。
|
||||||
|
|
||||||
| Kind | 说明 |
|
| Kind | 说明 |
|
||||||
|------|-------------|
|
| ---- | -------------------------------------- |
|
||||||
| s | **s**ymbol:查找使用该符号的引用 |
|
| s | **s**ymbol:查找使用该符号的引用 |
|
||||||
| g | **g**lobal:查找该全局符号的定义 |
|
| g | **g**lobal:查找该全局符号的定义 |
|
||||||
| c | **c**alls:查找调用当前方法的位置 |
|
| c | **c**alls:查找调用当前方法的位置 |
|
||||||
@ -1409,7 +1383,6 @@ $ cscope -bq
|
|||||||
|
|
||||||
推荐一些比较方便的映射,如:
|
推荐一些比较方便的映射,如:
|
||||||
|
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
nnoremap <buffer> <leader>cs :cscope find s <c-r>=expand('<cword>')<cr><cr>
|
nnoremap <buffer> <leader>cs :cscope find s <c-r>=expand('<cword>')<cr><cr>
|
||||||
nnoremap <buffer> <leader>cg :cscope find g <c-r>=expand('<cword>')<cr><cr>
|
nnoremap <buffer> <leader>cg :cscope find g <c-r>=expand('<cword>')<cr><cr>
|
||||||
@ -1425,14 +1398,12 @@ nnoremap <buffer> <leader>cd :cscope find d <c-r>=expand('<cword>')<cr><cr>
|
|||||||
|
|
||||||
帮助文档:`:h cscope`
|
帮助文档:`:h cscope`
|
||||||
|
|
||||||
|
|
||||||
### MatchIt
|
### MatchIt
|
||||||
|
|
||||||
由于 Vim 是用 C 语言编写的,因此许多功能都假设使用类似 C 语言的语法。默认情况下,如果你的光标在 `{` 或 `#endif` , 就可以使用 `%` 跳转到与之匹配的 `}` 或 `#ifdef`。
|
由于 Vim 是用 C 语言编写的,因此许多功能都假设使用类似 C 语言的语法。默认情况下,如果你的光标在 `{` 或 `#endif` , 就可以使用 `%` 跳转到与之匹配的 `}` 或 `#ifdef`。
|
||||||
|
|
||||||
Vim 自带了一个名为 matchit.vim 的插件,但是默认没有启用。启用后可以用 `%` 在HTML相匹配的标签或 VimL 的 if/else/endif 块之间进行跳转,它还带来了一些新的命令。
|
Vim 自带了一个名为 matchit.vim 的插件,但是默认没有启用。启用后可以用 `%` 在HTML相匹配的标签或 VimL 的 if/else/endif 块之间进行跳转,它还带来了一些新的命令。
|
||||||
|
|
||||||
|
|
||||||
##### 在 Vim 8 中安装
|
##### 在 Vim 8 中安装
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
@ -1539,7 +1510,7 @@ nnoremap [<space> :<c-u>put! =repeat(nr2char(10), v:count1)<cr>'[
|
|||||||
nnoremap ]<space> :<c-u>put =repeat(nr2char(10), v:count1)<cr>
|
nnoremap ]<space> :<c-u>put =repeat(nr2char(10), v:count1)<cr>
|
||||||
```
|
```
|
||||||
|
|
||||||
设置之后,连续按下 <kbd>5</kbd> <kbd>[</kbd> <kbd>空格</kbd> 在当前行上方插入 5 个空行。
|
设置之后,连续按下 <kbd>5</kbd> <kbd>\[</kbd> <kbd>空格</kbd> 在当前行上方插入 5 个空行。
|
||||||
|
|
||||||
## 快速编辑自定义宏
|
## 快速编辑自定义宏
|
||||||
|
|
||||||
@ -1599,7 +1570,7 @@ endif
|
|||||||
|
|
||||||
## 防止水平滑动的时候失去选择
|
## 防止水平滑动的时候失去选择
|
||||||
|
|
||||||
如果你选中了一行或多行,那么你可以用 <kbd><</kbd> 或 <kbd>></kbd> 来调整他们的缩进。但在调整之后就不会保持选中状态了。
|
如果你选中了一行或多行,那么你可以用 <kbd><</kbd> 或 <kbd>></kbd> 来调整他们的缩进。但在调整之后就不会保持选中状态了。
|
||||||
|
|
||||||
你可以连续按下 <kbd>g</kbd> <kbd>v</kbd> 来重新选中他们,请参考 `:h gv`。因此,你可以这样来配置映射:
|
你可以连续按下 <kbd>g</kbd> <kbd>v</kbd> 来重新选中他们,请参考 `:h gv`。因此,你可以这样来配置映射:
|
||||||
|
|
||||||
@ -1636,6 +1607,7 @@ autocmd InsertEnter,WinLeave * set nocursorline
|
|||||||
set complete-=i " disable scanning included files
|
set complete-=i " disable scanning included files
|
||||||
set complete-=t " disable searching tags
|
set complete-=t " disable searching tags
|
||||||
```
|
```
|
||||||
|
|
||||||
## 改变颜色主题的默认外观
|
## 改变颜色主题的默认外观
|
||||||
|
|
||||||
如果你想让状态栏在颜色主题更改后依然保持灰色,那么只需要这样设置:
|
如果你想让状态栏在颜色主题更改后依然保持灰色,那么只需要这样设置:
|
||||||
@ -1654,12 +1626,11 @@ autocmd ColorScheme lucius highlight StatusLine ctermbg=darkgray cterm=NONE guib
|
|||||||
|
|
||||||
下面的命令都比较有用,最好了解一下。用 `:h :<command name>` 来了解更多关于它们的信息,如:`:h :global`。
|
下面的命令都比较有用,最好了解一下。用 `:h :<command name>` 来了解更多关于它们的信息,如:`:h :global`。
|
||||||
|
|
||||||
|
|
||||||
### :global 和 :vglobal - 在所有匹配行执行命令
|
### :global 和 :vglobal - 在所有匹配行执行命令
|
||||||
|
|
||||||
在所有符合条件的行上执行某个命令。如: `:global /regexp/ print` 会在所有包含 "regexp" 的行上执行 `print` 命令(译者注:regexp 有正则表达式的意思,该命令同样支持正则表达式,在所有符合正则表达式的行上执行指定的命令)。
|
在所有符合条件的行上执行某个命令。如: `:global /regexp/ print` 会在所有包含 "regexp" 的行上执行 `print` 命令(译者注:regexp 有正则表达式的意思,该命令同样支持正则表达式,在所有符合正则表达式的行上执行指定的命令)。
|
||||||
|
|
||||||
趣闻:你们可能都知道老牌的 grep 命令,一个由 Ken Thompson 编写的过滤程序。它是干什么用的呢?它会输出所有匹配指定正则表达式的行!现在猜一下 `:global /regexp/ print` 的简写形式是什么?没错!就是 `:g/re/p` 。 Ken Thompsom 在编写 grep 程序的时候是受了 vi `:global` 的启发。(译者注: https://robots.thoughtbot.com/how-grep-got-its-name)
|
趣闻:你们可能都知道老牌的 grep 命令,一个由 Ken Thompson 编写的过滤程序。它是干什么用的呢?它会输出所有匹配指定正则表达式的行!现在猜一下 `:global /regexp/ print` 的简写形式是什么?没错!就是 `:g/re/p` 。 Ken Thompsom 在编写 grep 程序的时候是受了 vi `:global` 的启发。(译者注: <https://robots.thoughtbot.com/how-grep-got-its-name)>
|
||||||
|
|
||||||
既然它的名字是 `:global`,理应仅作用在所有行上,但是它也是可以带范围限制的。假设你想使用 `:delete` 命令删除从当前行到下一个空行(由正则表达式 `^$` 匹配)范围内所有包含 "foo" 的行:
|
既然它的名字是 `:global`,理应仅作用在所有行上,但是它也是可以带范围限制的。假设你想使用 `:delete` 命令删除从当前行到下一个空行(由正则表达式 `^$` 匹配)范围内所有包含 "foo" 的行:
|
||||||
|
|
||||||
@ -1669,8 +1640,6 @@ autocmd ColorScheme lucius highlight StatusLine ctermbg=darkgray cterm=NONE guib
|
|||||||
|
|
||||||
如果要在所有 _不_ 匹配的行上执行命令的话,可以使用 `:global!` 或是它的别名 `:vglobal` ( V 代表的是 inVerse )。
|
如果要在所有 _不_ 匹配的行上执行命令的话,可以使用 `:global!` 或是它的别名 `:vglobal` ( V 代表的是 inVerse )。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### :normal 和 :execute - 脚本梦之队
|
### :normal 和 :execute - 脚本梦之队
|
||||||
|
|
||||||
这两个命令经常在 Vim 的脚本里使用。
|
这两个命令经常在 Vim 的脚本里使用。
|
||||||
@ -1694,7 +1663,6 @@ autocmd ColorScheme lucius highlight StatusLine ctermbg=darkgray cterm=NONE guib
|
|||||||
:execute 'normal!' n . 'j'
|
:execute 'normal!' n . 'j'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### :redir - 重定向消息
|
### :redir - 重定向消息
|
||||||
|
|
||||||
许多命令都会输出消息,`:redir` 用来重定向这些消息。它可以将消息输出到文件、[寄存器](#寄存器)或是某个变量中。
|
许多命令都会输出消息,`:redir` 用来重定向这些消息。它可以将消息输出到文件、[寄存器](#寄存器)或是某个变量中。
|
||||||
@ -1717,19 +1685,31 @@ autocmd ColorScheme lucius highlight StatusLine ctermbg=darkgray cterm=NONE guib
|
|||||||
帮助文档:`:h :redir`
|
帮助文档:`:h :redir`
|
||||||
|
|
||||||
# 调试
|
# 调试
|
||||||
|
|
||||||
## 常规建议
|
## 常规建议
|
||||||
|
|
||||||
## 查看启动日志
|
## 查看启动日志
|
||||||
|
|
||||||
## 查看运行时日志
|
## 查看运行时日志
|
||||||
|
|
||||||
## 调整日志等级
|
## 调整日志等级
|
||||||
|
|
||||||
## vim 脚本调试
|
## vim 脚本调试
|
||||||
|
|
||||||
## 语法文件调试
|
## 语法文件调试
|
||||||
|
|
||||||
# 杂项
|
# 杂项
|
||||||
|
|
||||||
## 附加资源
|
## 附加资源
|
||||||
|
|
||||||
## Vim 配置集合
|
## Vim 配置集合
|
||||||
|
|
||||||
## 内置插件
|
## 内置插件
|
||||||
|
|
||||||
## 将 Control 映射到 CapsLock
|
## 将 Control 映射到 CapsLock
|
||||||
|
|
||||||
## 复活节彩蛋
|
## 复活节彩蛋
|
||||||
|
|
||||||
## 为何使用 hjkl
|
## 为何使用 hjkl
|
||||||
|
|
||||||
## 常见问题
|
## 常见问题
|
||||||
@ -1743,7 +1723,7 @@ autocmd ColorScheme lucius highlight StatusLine ctermbg=darkgray cterm=NONE guib
|
|||||||
2. **屏幕重绘** 。有一些功能会强制重绘所有行。
|
2. **屏幕重绘** 。有一些功能会强制重绘所有行。
|
||||||
|
|
||||||
| 典型肇事者 | 原因 | 解决方案 |
|
| 典型肇事者 | 原因 | 解决方案 |
|
||||||
|--------|--------|-----------|
|
| ------------------------ | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
|
||||||
| `:set cursorline` | 会导致所有行重绘 | `:set nocursorline` |
|
| `:set cursorline` | 会导致所有行重绘 | `:set nocursorline` |
|
||||||
| `:set cursorcolumn` | 会导致所有行重绘 | `:set nocursorcolumn` |
|
| `:set cursorcolumn` | 会导致所有行重绘 | `:set nocursorcolumn` |
|
||||||
| `:set relativenumber` | 会导致所有行重绘 | `:set norelativenumber` |
|
| `:set relativenumber` | 会导致所有行重绘 | `:set norelativenumber` |
|
||||||
@ -1751,10 +1731,8 @@ autocmd ColorScheme lucius highlight StatusLine ctermbg=darkgray cterm=NONE guib
|
|||||||
| `:set synmaxcol=3000` | 由于内部表示法,Vim 处理比较长的行时会有问题。让它高亮到 3000 列…… | `:set synmaxcol=200` |
|
| `:set synmaxcol=3000` | 由于内部表示法,Vim 处理比较长的行时会有问题。让它高亮到 3000 列…… | `:set synmaxcol=200` |
|
||||||
| matchparen.vim | Vim 默认加载的插件,用正则表达式查找配对的括号 | 禁用插件:`:h matchparen` |
|
| matchparen.vim | Vim 默认加载的插件,用正则表达式查找配对的括号 | 禁用插件:`:h matchparen` |
|
||||||
|
|
||||||
|
|
||||||
**注意**:只有在你真正遇到性能问题的时候才需要做上面的调整。在大多数情况下使用上面提到的选项是完全没有问题的。
|
**注意**:只有在你真正遇到性能问题的时候才需要做上面的调整。在大多数情况下使用上面提到的选项是完全没有问题的。
|
||||||
|
|
||||||
|
|
||||||
### 编辑大文件的时候很慢
|
### 编辑大文件的时候很慢
|
||||||
|
|
||||||
Vim 处理大文件最大的问题就是它会一次性读取整个文件。这么做是由于缓冲区的内部机理导致的(在 [vim_dev](https://groups.google.com/forum/#!topic/vim_dev/oY3i8rqYGD4/discussion) 中讨论)。
|
Vim 处理大文件最大的问题就是它会一次性读取整个文件。这么做是由于缓冲区的内部机理导致的(在 [vim_dev](https://groups.google.com/forum/#!topic/vim_dev/oY3i8rqYGD4/discussion) 中讨论)。
|
||||||
@ -1775,8 +1753,6 @@ $ vim -n -u NONE -i NONE -N
|
|||||||
|
|
||||||
简而言之,尽量避免使用 Vim 写过大的文件。
|
简而言之,尽量避免使用 Vim 写过大的文件。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 持续粘贴(为什么我每次都要设置 'paste' 模式)
|
### 持续粘贴(为什么我每次都要设置 'paste' 模式)
|
||||||
|
|
||||||
持续粘贴模式让终端模拟器可以区分输入内容与粘贴内容。
|
持续粘贴模式让终端模拟器可以区分输入内容与粘贴内容。
|
||||||
@ -1795,7 +1771,6 @@ $ vim -n -u NONE -i NONE -N
|
|||||||
|
|
||||||
Neovim 尝试把这些变得更顺畅,如果终端支持的话,它会自动开启持续粘贴模式,无须再手动进行切换。
|
Neovim 尝试把这些变得更顺畅,如果终端支持的话,它会自动开启持续粘贴模式,无须再手动进行切换。
|
||||||
|
|
||||||
|
|
||||||
### 在终端中按 ESC 后有延时
|
### 在终端中按 ESC 后有延时
|
||||||
|
|
||||||
如果你经常使用命令行,那么肯定要接触_终端模拟器_,如 xterm、gnome-terminal、iTerm2 等等(与实际的[终端](https://en.wikipedia.org/wiki/Computer_terminal)不同)。
|
如果你经常使用命令行,那么肯定要接触_终端模拟器_,如 xterm、gnome-terminal、iTerm2 等等(与实际的[终端](https://en.wikipedia.org/wiki/Computer_terminal)不同)。
|
||||||
@ -1813,9 +1788,9 @@ Neovim 尝试把这些变得更顺畅,如果终端支持的话,它会自动
|
|||||||
|
|
||||||
转义序列会产生同样的问题:
|
转义序列会产生同样的问题:
|
||||||
|
|
||||||
* `<esc>` 作为返回普通模式或取消某个动作的按键而被大量使用
|
- `<esc>` 作为返回普通模式或取消某个动作的按键而被大量使用
|
||||||
* 光标键使用转义序列进行的编码
|
- 光标键使用转义序列进行的编码
|
||||||
* Vim 期望 <kbd>Alt</kbd> (也叫作 _Mate Key_)会发送一个正确的 8-bit 编码的高位,但是许多终端模拟器并不支持这个(也可能默认没有启用),而只是发送一个转义序列作为代替。
|
- Vim 期望 <kbd>Alt</kbd> (也叫作 _Mate Key_)会发送一个正确的 8-bit 编码的高位,但是许多终端模拟器并不支持这个(也可能默认没有启用),而只是发送一个转义序列作为代替。
|
||||||
|
|
||||||
你可以这样测试上面所提到的事情: `vim -u NONE -N` 然后输入 `i<c-v><left>` ,你会看到一个以 `^[` 开头的字符串,表明这是一个转义序列,`^[` 就是转义字符。
|
你可以这样测试上面所提到的事情: `vim -u NONE -N` 然后输入 `i<c-v><left>` ,你会看到一个以 `^[` 开头的字符串,表明这是一个转义序列,`^[` 就是转义字符。
|
||||||
|
|
||||||
@ -1834,15 +1809,12 @@ set ttimeoutlen=10 " unnoticeable small value
|
|||||||
|
|
||||||
而如果你在 tmux 中使用 Vim 的话,别忘了把下面的配置加入到你的 `~/.tmux.conf`文件中:
|
而如果你在 tmux 中使用 Vim 的话,别忘了把下面的配置加入到你的 `~/.tmux.conf`文件中:
|
||||||
|
|
||||||
```
|
set -sg escape-time 0
|
||||||
set -sg escape-time 0
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### 无法重复函数中执行的搜索
|
### 无法重复函数中执行的搜索
|
||||||
|
|
||||||
* 在命令中的搜索(`/`、`:substitute` 等)内容会改变“上次使用的搜索内容”。(它保存在`/`寄存器中,用 `:echo @/` 可以输出它里面的内容)
|
- 在命令中的搜索(`/`、`:substitute` 等)内容会改变“上次使用的搜索内容”。(它保存在`/`寄存器中,用 `:echo @/` 可以输出它里面的内容)
|
||||||
* 简单的文本变化可以通过 `.` 重做。(它保存在 `.` 寄存器,用 `:echo @.` 可以输出它的内容)
|
- 简单的文本变化可以通过 `.` 重做。(它保存在 `.` 寄存器,用 `:echo @.` 可以输出它的内容)
|
||||||
|
|
||||||
而在你在函数中进行这些操作的时候,一切就会变得不同。因此你不能用 N/n 查找某个函数刚刚查找的内容,也不能重做函数中对文本的修改。
|
而在你在函数中进行这些操作的时候,一切就会变得不同。因此你不能用 N/n 查找某个函数刚刚查找的内容,也不能重做函数中对文本的修改。
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user