vim 总结

vim 总结:

vim 辅助记忆神图:

vim 辅助记忆神图

进入Vim自带的教程里

$ vimtutor

检查vim支持的功能

$ vim --version

注意:Mac 自带的 Vim 不支持复制内容到剪切板

光标快速移动

  • h, j, k, l : 左,下,上,右
  • w : 光标移动至下一单词首位
  • b : 光标移动至当前单词首位,如果光标已经在当前单词首位,就移动到前一单词首位
  • e : 光标移动至当前单词末位,如果光标已经在当前单词末位,就移动到下一单词末位
  • $ : 光标移动至行末
  • ^ : 光标移动至行首
  • gg : 光标移动至文本首行
  • Shift + G : 光标移动至文本尾行
  • 27 + Shift + G : 光标移动至文本第27行
  • Ctrl + f : 向下翻页
  • Ctrl + b : 向上翻页
  • 2 + Ctrl + f : 向下翻2页

插入

  • i : 进入编辑模式,在当前光标处插入文本
  • o : 进入编辑模式,在当前光标的下方插入新一行
  • a : 进入编辑模式,在下一光标处追加文本
  • s : 进入编辑模式,删除字符并插入

缩进

  • << : 向左缩进
  • >> : 向右缩进

删除

  • x : 删除光标处的字符
  • �X : 删除光标处前面的字符
  • D : 删除至本行行末
  • d$ : 删除至本行行末
  • d^ : 删除至本行行首
  • d0 : 删除至本行行首
  • dl : 删除光标处的字符
  • dh : 删除光标前一个字符
  • dd : 删除光标所在行
  • 3dd : 删除3行
  • dw : 删除到下一个单词开头
  • de : 删除到本单词末尾
  • dE : 删除到本单词末尾包括标点在内
  • db : 删除到前一个单词
  • dB : 删除到前一个单词包括标点在内
  • dG : 删除到文本末尾

查找与替换

  • f + 字符 : 在当前行的光标之后查找字符

  • F + 字符 : 在当前行的光标之前查找字符

  • /word : 全文查找 word

  • /.word : 向后搜索 word

  • ?.word : 向前搜索 word

  • n : 查找下一处

  • N : 查找上一处

  • r + c : 将光标所在的字符替换成 c

  • :s/foo/bar : 光标所在行的第一个 foo 替换为 bar

  • :1,50s/foo/bar/ : 在第1行和第50行之间(含)进行搜索和替换

  • :45s/foo/bar/ : 仅仅在第45行进行搜索和替换

  • :%s/foo/bar/g : 全文查找 foo 并替换为 bar

  • :%s/foo/bar/gc : 全文查找 foo 并替换为 bar,替换时询问

    y/n/a/q/l/^E/^Y :

    • y表示同意当前替换;
    • n表示不同意当前替换;
    • a表示替换当前和后面的并且不再确认;
    • q表示立即结束替换操作;
    • l表示把当前的替换后结束替换操作;
    • ^E向上滚屏,用来帮助查看前后内容以决定进行操作;
    • ^Y向下滚屏,用来帮助查看前后内容以决定进行操作。

多行查找替换

将 foo 替换成 bar

Shift + V
// 方向键选中需要查找替换的内容,输入:,vim会自动补全 :'<,'
:'<,'>s/foo/bar/g>

选中

  • v + i + w : 选中当前光标所在的单词 (iw: inner word)

  • v + b : 选中当前光标到当前单词的开头

  • v + w : 选中当前光标到当前单词的末尾

  • ggVG : 全选

    解释:

      gg 让光标移动到首行
      V  进入Visual(可视)模式
      G  光标移到最后一行
    

可视模式下(Visual) 选中内容进行以下操作了的含义:

  • d : 删除选中内容

  • y : 复制选中内容到0号寄存

复制粘贴

  • yy : 复制光标所在行的内容
  • p : 粘贴到光标所在行
  • +y : 复制选中内容到+寄存器,也就是系统剪贴板,供其他程序使用(在Mac下不可用,因为Mac的Vim不支持剪贴板,可使用以下命令替代)
  • :w !pbcopy : 复制选中内容到+寄存器,也就是系统剪贴版,供其他程序使用
  • +p : 粘贴系统剪贴板的内容(在Mac下不可用,因为Mac的Vim不支持剪贴板,可使用以下命令替代)
  • :r !pbpaste : 粘贴系统剪贴板的内容

其他

  • u : 撤销
  • U : 行内撤销
  • Ctrl + r : 取消撤销
  • :!ls : 等同于在 Shell 终端执行 ls 命令。

自定义快捷键

Vim 通过 map 自定义快捷键,map 是一个映射命令,将常用的很长的命令映射到一个新的功能键上。

对于 map 而言,可能有这么几种前缀:

  • nore : 表示非递归。 递归的映射,其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。
  • n : 表示在普通模式下生效
  • v : 表示在可视模式下生效
  • i : 表示在插入模式下生效
  • c : 表示在命令行模式下生效

命令格式:

:map {lhs} {rhs}

其含义是,在 :map 作用的模式中把键系列 {lhs} 映射为 {rhs}{rhs} 可进行映射扫描,也就是可递归映射.

<Leader>和mapleader变量

mapleader变量对所有map映射命令起效,它的作用是将参数<Leader>替换成mapleader变量的值,可以用来自定义快捷键的前缀。

  • let mapleader=";" : 自定义快捷键的前缀为;

支持系统剪贴板的复制粘贴

let mapleader=";"
vmap <Leader>y :w !pbcopy<CR><CR>
nmap <Leader>y :w !pbcopy<CR><CR>
nmap <Leader>p :r !pbpaste<CR><CR>

.vimrc 进行如上配置后,就支持以下的2个命令了:

  • ;y : 复制内容到剪贴板
  • ;p : 粘贴剪贴板的内容

支持移动文本到上/下一行

nnoremap <C-j> :m .+1<CR>==
inoremap <C-j> <Esc>:m .+1<CR>==gi
vnoremap <C-j> :m '>+1<CR>gv=gv
nnoremap <C-k> :m .-2<CR>==
inoremap <C-k> <Esc>:m .-2<CR>==gi
vnoremap <C-k> :m '<-2<CR>gv=gv

.vimrc 进行如上配置后,就支持快捷键上下移动文本了:

  • Ctrl + j : 移动文本到下一行
  • Ctrl + k : 移动文本到上一行

键表

<k0> - <k9>     : 小键盘 0 到 9 
<S-...>     : Shift+键 
<C-...>     : Control+键 
<M-...>     : Alt+键 或 meta+键 
<A-...>     : 同 <M-...> 
<Esc>       : Escape 键 
<Up>        : 光标上移键 
<Space>     : 插入空格 
<Tab>       : 插入Tab 
<CR>        : 等于<Enter>

插件管理

pathogen

使用 pathogen 来管理插件会非常的方便,可以让每一个插件占有一个单独的目录,解决了文件分散的问题。只需要将要安装的所有插件放在 ~/.vim/bundle 目录下即可,如果要删除某个插件,只需要将 ~/.vim/bundle 目录下对应的插件目录删除即可,通常使用 git clone 的方式安装插件。

vundle

Vundle 可以说是 pathogen 的升级版,把 git 操作整合进去,进一步简化了操作,用户需要做的只是去 GitHub 上找到自己想要的插件的名字,安装、更新和卸载由 vundle 来完成。

插件的安装目录是:~/.vim/bundle

在 vim 里面运行以下命令来安装插件:

:so ~/.vimrc    // reload vimrc
:PluginInstall

其他命令:

  • 打开doc : :h vundle
  • 更新插件 : :PluginUpdate
  • 清空全部没有在.vimrc中配置的插件 : :PluginClean
  • 清空没有使用的插件 : :PluginClean!
  • 列出所有插件 : PluginList
  • 查找插件 : PluginSearch

vim-plug

vim-plugvundle 升级版,支持并行安装插件,异步加载插件,配合 NeoVim 可以安装一些比较高级的插件。

vim 常用插件列表

插件命令

vim-markdown-toc

  • :GenTocGFM : 生成 GFM (Github Flavored Markdown) 风格的目录
  • :GenTocRedcarpet : 生成 Redcarpet 风格的目录
  • :GenTocGitLab : 生成 GitLab 风格的目录
  • :UpdateToc : 手动更新目录
  • :RemoveToc : 手动删除目录

插件快捷键

nerdtree

NERDTree 快捷键辑录

  • Ctrl + n : 打开/关闭 nerdtree(自定义的map)
  • Ctrl + w + w : 左右切换窗口

.vimrc 配置

以下是我的 vim 配置:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax on               " 语法高亮
filetype plugin on      " 根据不同的文件类型语言加载不同插件(如,C++ 的语法高亮插件与python的不同)

set nocompatible        " 关闭兼容模式 
set number              " 显示行号
set autoindent          " 自动对齐
set smartindent         " 智能对齐
set showmatch           " 括号匹配模式
set ruler               " 显示状态行
set incsearch           " 查询时非常方便,如要查找book单词,当输入到/b时,会自动找到   第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词时,别忘记回车.

set cindent             " C语言格式对齐
set nobackup            " 不要备份文件
set clipboard+=unnamed  " 共享剪贴板

" 1 tab == 4 spaces
set tabstop=4
set shiftwidth=4

" 高亮显示当前行/列
set cursorline          
" set cursorcolumn

" 与剪贴板共享复制粘贴
let mapleader=";"
vmap <Leader>y :w !pbcopy<CR><CR>
nmap <Leader>y :w !pbcopy<CR><CR>
nmap <Leader>p :r !pbpaste<CR><CR>

" 上移或下移一行
nnoremap <C-j> :m .+1<CR>==
inoremap <C-j> <Esc>:m .+1<CR>==gi
vnoremap <C-j> :m '>+1<CR>gv=gv
nnoremap <C-k> :m .-2<CR>==
inoremap <C-k> <Esc>:m .-2<CR>==gi
vnoremap <C-k> :m '<-2<CR>gv=gv


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => pathogen 
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
execute pathogen#infect()
filetype plugin indent on


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Vundle & Plugins
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
filetype off                  " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.

Plugin 'godlygeek/tabular'
Plugin 'plasticboy/vim-markdown'
Plugin 'mzlogin/vim-markdown-toc'
Plugin 'altercation/vim-colors-solarized'
"Plugin 'dbgx/lldb.nvim'

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Plugin Settings
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" vim-markdown 
let g:vim_markdown_folding_disabled = 1

" vim-instant-markdown 
" vim-instant-markdown 不能使用vundle安装,只能使用npm手动安装
set shell=bash\ -i

"solarized theme
syntax enable
set background=dark
"set background=light
colorscheme solarized

" lldb.nvim
"set rtp+=/path/to/lldb.nvim

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => vim-plug
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 
if empty(glob('~/.vim/autoload/plug.vim'))
    silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
      \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')

Plug 'dbgx/lldb.nvim'
Plug 'scrooloose/nerdtree'

" lldb.nvim
set rtp+=/path/to/lldb.nvim

" nerdtree
map <C-n> :NERDTreeToggle<CR>


" Initialize plugin system
call plug#end()


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => 一键编译 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 
map <F5> :call Run()<CR>
func! Run()
    exec "w"
    exec "!g++ -Wall % -o %<"
    exec "!./%<"
endfunc

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容