本章说明如何配置vim。vim的配置文件名为.vimrc,示例为:
set nocompatible 
syntax on
set nu
filetype indent plugin on
返回 
 
 
将映身为一个动作。
nnoremap <silent> <F4> :set cursorline!<CR>
返回 
             
            
              
            
                
           
          
            
            
              
 
本节关注:剪切 (cut / delete)、拷贝 (copy / yank)、粘帖( paste / put)。 
 
键 
命令 (Command ) 
 
 
d 
delete 
 
c 
change (delete and enter insert mode) 
 
y 
yank (copy) 
 
u 
undo 
 
p 
put (paste) 
 
r 
replace (with whatever character you press next) 
 
 
 
键 
命令 (Command ) 
 
 
dd 
to change an entire line 
 
cc 
to delete an entire line 
 
yy 
to yank an entire line 
 
 
 
 
C removes the line from your cursor onward and puts you in insert modeY yanks all the words from your cursor forward, and so forth.
 
场景:
写函数时,要将鼠标置于空行缩进处:
scope.awesome = function(arg){
};
一般做法:回车生成新行,再回去删除原行。cc或C,删除原有行并进入输入模式。
返回 
             
            
              
            
                
           
          
            
            
              count + action 模式:3dw = dw + dw + dw
operator + count + motion 模式
d5l  the five characters to the right of the cursor make up a text object. Delete it.d5j  the next five lines constitute a text object whose presence is no longer required.
快捷键 
文本对象 (Text Object ) 
 
 
w 
从当前鼠标到词尾 
 
W 
从当前鼠标到词尾(计入标点) 
 
’ ‘’ 
在引号中的字符串 
 
l 
从当前鼠标到句尾 
 
 
 . it repeats the last change you made to the text, but at your current position.
What is a “Change”? 
 
返回 
             
            
              
            
                
           
          
            
            
              Words 是被标点分离的词,WORDS是含标点的字符。
如: http://I.am.a.frog.com 是6个Word,是1个WORD
文本对象通常被特定字符包围:WORD被空白符包围;word被非字符包围;句子被句号或行结尾包围。
Who is John Galt?
 
鼠标在Galt词上,则diw删除该词,句子被修改为Who is John ?,iw意为inner of word;若ciw则替换该词。
若用a,则daw删除该词及其两边空白字符,句子被修改为Who is John?。
“Hello there! (He| lied)”. Ted was always cheerful.
 
da( 删除括号中内容及括号变为:
“Hello there! |”. Ted was always cheerful.
 
闭合字符 
含义 
 
 
{ 
圆括号之间内容 
 
[ 
方括号之间内容 
 
< 
尖括号之间内容 
 
t 
XML或HTML标签之间内容 
 
 
 
5w代表向右移动5个词,6j代表向下移动6行。但重复数过多时,不如重复操作。 
 
vim标签分为两类:小写标签和大写标签。小写标签为文件内指向,大写标签为文件件指向。
m + [字母]:在正常模式下操作,设定一个以字母为名字的标签。` + [字母] : 跳至以字母为名的标签处。 
’ + [字母]:跳至以字母为名的标签外行首。 
 
返回 
             
            
              
            
                
           
          
            
              
                wall-e  
              
                  
                    2021 年9 月 22 日 06:14
                   
                  11 
               
             
            
              
 
 
插件即一个函数、快捷键、脚本集合,使用vim更加好用。
 
下载插件(.zip文件) 
解压文件并拷贝到$HOME/.vim文件夹 
重启vim 
 
 
 
 
返回 
             
            
              
            
                
           
          
            
              
                wall-e  
              
                  
                    2021 年9 月 22 日 06:14
                   
                  12 
               
             
            
              
 
一个vim命令包含:
根据不同场景,以上三项均是可选。
4j  数字+移动4p 数字+操作
editing by motion
 
输入以下代码:
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
返回 
             
            
              
            
                
           
          
            
              
                wall-e  
              
                  
                    2021 年9 月 22 日 06:15
                   
                  15 
               
             
            
              
 
:set foldmethod=indent  ”按同级内缩折叠
:set foldmethod=syntax  “按语法规则折叠
zc:折叠zo:打开折叠
注:vim没有针对python语法的折叠功能,需要安装插件,本人安装的是SimpylFold 。
只有当以vim为主要开发工具时,才涉及到本节详细命令。故暂略去更多相关命令。
返回 
             
            
              
            
                
           
          
            
              
                wall-e  
              
                  
                    2021 年9 月 22 日 06:17
                   
                  18 
               
             
            
              
 
解释了相对于其它编辑器,vim胜出的原因在于:其将大部分操作限制在常用键区域完成。
返回 
             
            
              
            
                
           
          
            
              
                wall-e  
              
                  
                    2021 年9 月 22 日 06:17
                   
                  19 
               
             
            
              
 
 
nmap: 正常模式下映射 
vmap: 可视模式下映射 
imap: 插入模式下映射 
 
示例:
nmap  ea   将e 映射为 ea,移至词尾并进入插入模式
 
设置新的引导键:
let mapleader=","
引导键+e 定义新功能:
nmap <Leader>e ea
返回 
             
            
              
            
                
           
          
            
              
                wall-e  
              
                  
                    2021 年9 月 22 日 06:17
                   
                  20 
               
             
            
              
 
在插入模式中,有时需要在不离开插入模式的情况下进行文本操作。这样可以提高编辑效率。
命令 
结果 
 
 
<ctrl> w 
删除鼠标之前的词 
 
<ctrl> u 
删除鼠标之前的行 
 
<ctrl> t 
增加行缩进 
 
<ctrl> d 
减少行缩进 
 
<ctrl> n 
找到下一个补全建议 
 
<ctrl> x 
 
<ctrl> r 
插入寄取器内容,跟上一个寄取器名称 
 
 
 
 
vim会描扫已输入的词,当你键入 <ctrl> n 时vim会提示可能的匹配供选择。
返回