vim是个啥?
最优秀的自由软件,,高度可定制的文本编辑器之一,俗话说:上到用vim改sh、python脚本,下到用vim改txt文本。只要会玩,定位关键词、跳行、搜大小.....【简单理解类似于Windows上的文本和notec++软件】
插入:编辑、可改可保存
可视:光标移动,高亮选择展示
命令行:执行设置、文档、替换及vim支持的命令操作
从普通到插入
操作 | 说明 |
---|---|
i | 光标左侧插入你即将输入的内容 |
a | 光标右侧插入你即将输入的内容 |
o | 光标所在的下一行增添行 |
O | 光标所在的上一行新增行 |
I | 光标所在 开头插入 |
A | 光标所在 末尾插入 |
从插入回到普通
直接按键盘上的ESC,插入切换到普通
从普通到可视
操作 | 说明 |
---|---|
v | 移动字符高亮度显示 |
V | 按照行来进行高亮度显示 |
ctrl + v | 按照块来进行高亮度显示 |
vi{ | 选中{}里面的内容,不包括{}括号本身 |
va{ | 选中{}里面的内容,包括{}括号本身 |
vi( | 选中()里面的内容 |
vi< | 选中<>里面的内容 |
vi[ | 选中[]里面的内容 |
vit | 选中 里面 的内容 |
vi” | 选中”"中间内容 |
vi’ | 选中”中间的内容、 |
vis | 选中一个句子 |
vib | 选中一个block |
viw | 选中一个单词 |
vip | 选中一个段落 |
o | 切换光标开头和结尾 |
可视模式 ——> 普通模式
在模式下v的反操作
普通模式 ——> 命令行模式
命令行模式输入":"进入命令行模式
字符移动
操作 | 说明 |
---|---|
h | 左 |
j | 下 |
k | 上 |
l | 右 |
单词移动
操作 | 说明 |
---|---|
w | 移动到下个单词开头 |
W | 移动到下个单词开头(单词含标点) |
e | 移动到下个单词结尾 |
E | 移动到下个单词结尾(单词含标点) |
b | 移动到上个单词结尾 |
B | 移动到上个单词结尾(单词含标点) |
fx | 向后搜索<字母>并跳转到第一个匹配的位置 |
Fx | 向前搜索<字母>并跳转到第一个匹配的位置 |
% | 移动到{,[( |
行内移动
操作 | 说明 |
---|---|
0 | 移动到行首 |
^ | 移动到行首 |
$ | 移动到行尾 |
g_ | 移动到行内最后一个非空白符 |
行间移动
操作 | 说明 |
---|---|
ngg | 移动到n行 |
G | 移动到行尾 |
页内移动
操作 | 说明 |
---|---|
H | 移动到当前页面顶部 |
M | 移动到当前页面中间 |
L | 移动到当前页面底部 |
文档移动
操作 | 说明 |
---|---|
Ctrl + b | 向后滚动一屏 |
Ctrl + f | 向前滚动一屏 |
Ctrl + d | 向前滚动半屏 |
Ctrl + u | 向后滚动半屏 |
zz | 移动屏幕使光标居中 |
编辑
操作 | 说明 |
---|---|
r | 替换当前字符 |
J | 将下一行合并到当前行 |
gJ | join line below to the current one without space in between |
gwip | reflow paragraph |
cc | 清空当前行, 然后进入插入模式 |
c$ | 从光标位置开始, 修改当前行 |
ciw | change (replace) entire word |
cw | 从光标位置开始, 修改单词 |
s | 删除当前字符, 然后进入插入模式 |
S | 清空当前行, 然后进入插入模式 (同cc) |
xp | 当前字符后移 |
u | 撤销 |
Ctrl + r | 重复 |
. | 再次执行上个命令 |
查找/替换
操作 | 说明 |
---|---|
/pattern | 查找pattern |
?pattern | 向上查找pattern |
\vpattern | pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符) |
n | 查找下一个 |
N | 查找上一个 |
:%s/old/new/g | 替换全部 |
:%s/old/new/gc | (逐个)替换 |
:noh | 移除搜索结果的高亮显示 |
删除
操作 | 说明 |
---|---|
x | 删除光标后字符 |
X | 删除光标前字符 |
dd | 删除改行 |
dw | 删除单词 |
d$ | 删除到行尾 |
d^ | 删除到行首 |
ndd | 删除n行 |
剪切, 复制, 粘贴
操作 | 说明 |
---|---|
yy | 复制当前行 |
nyy | 复制 n 行 |
yw | 复制当前单词 |
y$ | 复制, 从光标位置到行末 |
p | 在光标后粘贴 |
P | 在光标前粘贴 |
dd | 剪切当前行 |
ndd | 剪切 2 行 |
dw | 剪切当前单词 |
D | 剪切, 从光标位置到行末 |
d$ | 剪切, 从光标位置到行末 (同D) |
x | 剪切当前字符 |
操作 | 说明 |
---|---|
:e file | 新建缓冲区打开 filename |
:bnext or :bn | 切换到下个缓冲区 |
:bprev or :bp | 切换到上个缓冲区 |
:bd | 关闭缓冲区 |
:ls | 列出所有打开的缓冲区 |
:sp file | 新建缓冲区打开 filename 并水平分割窗口 |
:vsp file | 新缓冲区打开 filename 并垂直分割窗口 |
Ctrl + ws | 水平分割窗口 |
Ctrl + ww | 在窗口间切换 |
Ctrl + wq | 关闭窗口 |
Ctrl + wv | 垂直分割窗口 |
Ctrl + wh | 切换到右侧窗口 |
Ctrl + wl | 切换到左侧窗口 |
Ctrl + wj | 切换到下侧窗口 |
Ctrl + wk | 切换到上侧窗口 |
Vim的配置文件位于~/.vimrc,文件使用VimScript语法来编写
参考阮一峰的Vim 配置入门
快捷键配置
映射模式
定义映射模式时,我们可以使用nmap、imap、vmap来定义映射仅在normal、insert、visual模式有效
一般的映射模式是有副作用的,例如:
nmap dd O<esc>jddk
这一命令想要将dd映射为:
O向上添加一个新行
esc返回normal模式
j向下移动到要删除的一行
dd删除这一行
k向上移动到新增的一行
然而实际执行中,当你按下dd时,文件会无限刷出空行直到你按下,这是因为这一命令中jddk中的dd也按照按键映射解读了。因此形成了一个死循环。
命令noremap解决了这个问题,每一个map命令都对应一个noremap命令。包括noremap、nnoremap、inoremap、vnoremap,它可以保证映射中的操作都遵循默认的操作。
这次我们使用noremap重新定义刚才的映射:
nnoremap dd O<esc>jddk
再次测试,发现不再出现死循环了。
使用Leader键
vim中的组合键是通过按键序列来执行的,例如qd这个操作,你只需要先按下q再按下d就好了,而不需要qd一起按。
由于Vim已经占用了大量的按键,导致我们配置快捷键时处处受限。
由于有些按键在vim的非insert模式中几乎是永远不会用到的(例如逗号,),因此我们可以在快捷键的命令前统一加上这个键,方便好记又不会冲突。这个键就称为Leader键。
我们可以通过let mapleader=","这一命令将逗号设置为leader键(设置其它键的方法同理)。然后对前文中我们定义的映射dd做一些修改:
nnoremap <leader>dd O<esc>jddk
这下我们就可以通过,dd的组合键来调用映射了。
安装vundle
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
$vim ~/vimrc
set nocompatible " 去除VI一致性,必须要添加
filetype off " 必须要添加
" 设置包括vundle和初始化相关的runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 另一种选择, 指定一个vundle安装插件的路径
"call vundle#begin('~/some/path/here')
" 让vundle管理插件版本,必须
Plugin 'VundleVim/Vundle.vim'
" 以下范例用来支持不同格式的插件安装.
" 请将安装插件的命令放在vundle#begin和vundle#end之间.
" Github上的插件
" 格式为 Plugin '用户名/插件仓库名'
Plugin 'tpope/vim-fugitive'
" 来自 http://vim-scripts.org/vim/scripts.html 的插件
" Plugin '插件名称' 实际上是 Plugin 'vim-scripts/插件仓库名' 只是此处的用户名可以省略
Plugin 'L9'
" 由Git支持但不再github上的插件仓库 Plugin 'git clone 后面的地址'
Plugin 'git://git.wincent.com/command-t.git'
" 本地的Git仓库(例如自己的插件) Plugin 'file:///+本地插件仓库绝对路径'
Plugin 'file:///home/gmarik/path/to/plugin'
" 插件在仓库的子目录中.
" 正确指定路径用以设置runtimepath. 以下范例插件在sparkup/vim目录下
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" 安装L9,如果已经安装过这个插件,可利用以下格式避免命名冲突
Plugin 'ascenator/L9', {'name': 'newL9'}
" 你的所有插件需要在下面这行之前
call vundle#end() " 必须
filetype plugin indent on " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
" 忽视插件改变缩进,可以使用以下替代:
"filetype plugin on
"
" 常用的命令
" :PluginList - 列出所有已配置的插件
" :PluginInstall - 安装插件,追加 `!` 用以更新或使用 :PluginUpdate
" :PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存
" :PluginClean - 清除未使用插件,需要确认; 追加 `!` 自动批准移除未使用插件
"
" 查阅 :h vundle 获取更多细节和wiki以及FAQ
" 将你自己对非插件片段放在这行之后
常用的插件
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有