vim 常用命令整合

原文链接:https://xautshuanglong.club/2016/04/15/Linux/vim-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

vim 常用命令图解

图文并茂地记录 vim 各模式下的操作方法及相应快捷键,附带 vim 地配制方法及插件安装。

20160415_0.png

vi-vim-cheat-sheet-sch.gif

命令(快捷键)详解

1. 编辑模式  
命令说明
i,Ii: 从光标所在处开始插入;
I: 在光标所在行的第一个非空格字符处开始插入。
a,Aa: 从光标所在处的下一个字符开始插入;
A: 在光标所在行的最后一个字符处开始插入。
o,Oo: 在光标所在行的下一行插入新行;
O: 在光标所在行的上一行插入新行。
r,Rr: 只取代光标所在处的字符一次;
R: 一直取代光标所在处的文字,直到按下 ESC为止。
2. 指令模式
命令说明
Esc进入指令模式
:w将编辑的数据写入到硬盘档案中
:w!若文档属性为 只读 时,强制写入文档。能否写入成功与对该文档的权限有关。
:q离开vi
:q!强制离开,不存储文档。
:e重新加载已打开的文件。
:e!放弃所有修改,并打开原来的文件
:wq存储后离开,若为 :wq! 则强制存储后离开。
ZZ大写的 Z
若文档没有改动,则不存储离开;
若文档被改动过,则存储后离开。
:w [filename]将文档存储成另一个文档【另存为】。
:r [filename]在编辑的数据中读入另一个文档,将【filename】内容添加到所在行后面。
:n1,n2 w [filename]将n1到n2的内容存储到filename文档。
:! command暂时离开vi到指令列模式,执行 command 并显示结果。
:set nu/nonuvim 环境的变更
显示行号/取消行号。
3. 移动光标
命令说明
h 或 ←光标向左移动一个字符
j 或 ↓光标向下移动一个字符
k 或 ↑光标向上移动一个字符
l 或 →光标向右移动一个字符
[Ctrl]+[f]屏幕【向下】移动一页 == PageDown
[Ctrl]+[b]屏幕【向上】移动一页 == PageUp
[Ctrl]+[d]屏幕【向下】移动半页
[Ctrl]+[u]屏幕【向上】移动半页
+光标移动到下一行首个非空格符处
-光标移动到上一行首个非空格符处
nspace光标向右移动n个字符(包括空格),当前行剩余字符不足n时,跳至下一行
0 或 home光标移动到当前行的首字符
$ 或 end光标移动到当前行的末字符
H光标移动到屏幕首行首字符
M光标移动到屏幕中间行首字符
L光标移动到屏幕末行首字符
G光标移动到文档末行首字符
nG光标移动到文档第n行首字符
gg光标移动到文档首行首字符
nEnter光标向下移动n行
b将光标移动到单词开头
e将光标移动到单词末尾
n|将光标移动到当前行的第 n 列
[[ 或 ]]跳转到函数 开头 或 结尾
{[ 或 ]}跳转到区块 开头 或 结尾
4. 复制与粘贴
命令说明
x,Xx向后(X向前)删除一个字符,Delete(Backspace)
nx向后删除n个字符
dd剪切光标所在的那一整行
ndd剪切光标所在处向下n行
d1G剪切光标所在处到第一行的所有数据
dG剪切光标所在处到最后一行的所有数据
d$剪切光标所在处到该行最后一个字符的所有数据
d0剪切光标所在处到该行第一个字符的所有数据
D剪切光标处到行末的所有数据
y复制选中的内容到剪贴板
yy复制光标所在的那一行
nyy复制光标所在处向下n行
y1G复制光标所在行到第一行的所有数据
yG复制光标所在行到最后一行的所有数据
y0复制光标所在处到该行行首的所有数据
y$复制光标所在处到该行行尾的所有数据
p,Pp将已复制的数据粘贴到光标下一行;
P将已复制的数据粘贴到光标上一行.
J将光标所在行与下一行的数据结合成一行
c重复删除多个数据。eg:[10cj],向下删除10行
u复原前一个动作
[Ctrl]+r重做上一个动作
.重复前一个动作
5.重复5次前一个动作
:1,10 d将1-10行剪切,可用 p 命令粘贴
:1,10 m 20将 1-10 行移动到 20 行之后
:1,10 co 20将 1-10 拷贝到 20 行之后
:1,$ co $将整篇文档拷贝一份添加到文件末尾
5. 搜索与替代
命令说明
/word从光标处向下查找 word 字符串
【:nohlsearch 关闭搜索高亮】
?word从光标处向上查找 word 字符串
*全文查找光标处的单词
n重复前一个搜索动作
N反向重复上一个搜索动作
:s/old/new用 new 替换 old,当前行第一个匹配
:s/old/new/g用 new 替换 old,当前行所有匹配
:%s/old/new用 new 替换 old,所有行第一个匹配
:%s/old/new/g用 new 替换 old,整篇文档的所有匹配
:n1,n2s/word1/word2/g
:n1,n2s/word1/word2/gc
在n1行与n2行之间寻找word1字符串,并将该字符串替换为word2。
在替换前提示用户确认是否需要替换
:3,5s/^/#/g
:3,5s/^/\/\//g
将3到5行注释掉
:3,5s/^#//g
:3,5s/^\/\///g
取消3到5行的注释
:3,5s/^#/    /g在3到5行行首添加4个空格,用于缩进
:%s/^/#/g注释整个文档,更快
%括号匹配
[Ctrl]+a增加光标处的数字
[Ctrl]+x减小光标处的数字
6. 窗口命令
命令说明
:open file在当前窗口打开一个新文件
:split file在新窗口中打开文件(水平分割)
:new file在新窗口中打开文件(水平方向)
:vsplit file在新窗口中打开文件(垂直分割)
:bn/:bp在当前窗口中切换至下/上一个已打开的文件
[Ctrl]+ww移动到下一个窗口
[Ctrl]+wh移动到左方的窗口
[Ctrl]+wj移动到下方的窗口
[Ctrl]+wk移动到上方的窗口
[Ctrl]+wl移动到右方的窗口
:only关闭所有窗口,只保留当前窗口
7. 对齐命令
命令说明
:%!fmt对齐所有行
!}fmt对齐光标处的所有行
5!!fmt对齐光标所在处向下 5 行

Vim 命令合集
超过130个你需要了解的 vim 命令
vim 命令

vim 配置

必知必会

  • .vimrc example
set autoindent
set cindent
set hlsearch
set incsearch
set number
set nocompatible
set noswapfile
set nobackup
set ruler
set showmatch
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set showmatch
set laststatus=2
set wildmenu
set scrolloff=3
set completeopt=longest,menu

set cursorline
"set cursorcolumn

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

syntax enable
syntax on
filetype off

set statusline=[%F]\ line=%l/%L\ col=%c]\ [%p%%]

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'majutsushi/tagbar'
    Plugin 'pboettch/vim-cmake-syntax'
    Plugin 'scrooloose/nerdtree'
    Plugin 'octol/vim-cpp-enhanced-highlight'
    Plugin 'Xuyuanp/nerdtree-git-plugin'
call vundle#end()
filetype plugin indent on

"------------------ Tagbar Configuration --------------------"
let g:tagbar_ctags_bin='/usr/local/bin/ctags'

"------------------ NERDTree Configuration --------------------"
let NERDTreeShowBookmarks=1
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
let NERDTreeShowHidden=1
let g:nerdtree_tabs_open_on_console_startup=1
let NERDTreeIgnore=['\.pyc$','\~$','\.swp$','\.o$','\.a$','\.so$']

vim 疑难

换行符处理

问题描述

vim 保存后整个文档都被标记为更改,差异对比显示每行末尾出现^M字样。

问题根源

Unix 只需一个换行符(\n) 0A
DOS/Windows 需要一个回车符加一个换行符(\r\n) 0D0A

解决方案

:e ++ff=unix         /*设置 fileformats 为 unix,0D \r 被显示 ^M*/
:%s/[^[:print]]$//g  /*清除行末不可打印字符但不限于 ^M*/
:%s/[[:space]]*$//g  /*清楚行末空白字符*/
:%s/\^M//g           /* ^M == Ctrl+v, Ctrl+m */
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值