Vim使用篇

前言

使用vim已经很久了,记得当初促使我学习使用vim的原因是因为长时间频繁的挪动肩膀(鼠标与键盘之间的来回切换)导致我一天工作下来,无亚于做了一天的体力活 : ( ,虽然有尝试记住IDE(goland)的一些快捷键来缓解肩膀的压力,但是始终无法做到”面面俱到“ , 在用vim时是需要手动搭建适合自己的开发环境的,在大量的插件中找到并调试成不逊色于IDE的开发环境,这往往就阻止了很多使用者,如何既享受vim带来的便捷操作,又可以简单自由搭配组建自己的开发环境;我这边使用的是vscode+vim的方式;vscode自不必介绍,号称“宇宙第一编辑器”😃,丰富的插件库,傻瓜式安装,卸载,可以让使用者自由搭配适合自己的开发环境,哪怕你是一个多语言人才,一个编辑器就可以满足你的需求; 这里简单记录下使用的快捷键;关于vim的配置文件和vscode的配置文件见:https://github.com/wzbwzt/myvim

安装

Vim配置文件.vimrc,分系统配置和用户配置两种。
系统配置文件存放在Vim的安装目录,默认路径为/usr/share/vim/.vimrc,使用命令echo $VIM查看
用户配置文件,存放在用户主目录下~/.vimrc。使用命令echo $HOME确定用户主目录。

vim的三种常用模式:普通模式(默认)、插入模式、命令行模式。

移动

h\j\k\l >左、下、上、右

w>移动到下一个单词的第一个字符位置
e>移动到下一个单词的最后一个字符位置
b>移动到上一个单词的第一个字符位置
ge>移动到上一个单词的最后一个字符位置

W>移动到下一个字串的第一个字符位置
E>移动到下一个字串的最后一个字符位置
B>移动到上一个字串的第一个字符位置
gE>移动到上一个字串的最后一个字符位置

注意:单词与字串的区别
单词:以非字母、数字、下划线分割
字串:以空白字符分割

0>移动光标到行首
$>移动光标到行尾

}>移动到光标所在段的段尾
{>移动到光标所在段的段头

H>移动到当前屏幕的顶端
L>移动到当前屏幕的底端
M>移动到当前屏幕的中端
zz>将光标所在行展示到屏幕中间
zb>将光标所在行展示到屏幕底端
zt>将光标所在行展示到屏幕顶端

:+数字>移动到指定行数
数字+G>同上
gg>移动到文件首部
G>移动到文件尾部

%>移动到括号所在的另一半位置,来回切换

ctr+d>往下翻半页
ctr+u>往上翻半页

搜索

/+char>往下搜索;
?+char>往上搜索;

注意:n 跳到下一个匹配位置;N 跳到上一个匹配位置
/+char\c >\c强制不区分大小写

*>移动到与光标所在单词匹配的下一个单词处
#>移动到与光标所在单词匹配的上一个单词处

注意搜索到的词会高亮显示;:noh取消高亮

跳转

ctr-] -> 跟着link/tag转入 (follow link/tag)
ctr-o -> 回到上一次的jump (go back)
ctr-i -> 跳回下一个 (go forward)
:ju -> 显示所有的可以跳跃的地方 (print jump list)

替换

语法:[addr]s/源字符串/目的字符串/[option]

[addr]表示检索范围,如:
“1,n”:表示从第1行到n行
“%”:表示整个文件,同"1,$"
“.,$”:表示从当前行到文件尾
[addr]表示检索范围,如:
“1,n”:表示从第1行到n行
“%”:表示整个文件,同"1,$"
“.,$”:表示从当前行到文件尾
[addr]省略时表示当前行

s:表示替换操作,其为substitute的缩写

[option] : 表示操作类型,如:
g:globe,表示全局替换
c:confirm,表示进行确认
p:表示替代结果逐行显示(Ctrl + L恢复屏幕)
i:ignore,不区分大小写
[option]省略时仅对每行第一个匹配串进行替换

插入、删除:

i >从光标头插入
a >从光标尾插入
I >从光标所在行头插入
A >从光标所在行尾插入
o >跳转到光标所在行的下一行插入
O >跳转到光标所在行的上一行插入

x >删除光标所在字符(不进入插入模式)
X >删除光标所在前一个字符(不进入插入模式)
d0>删除光标所在字符到行首内容;(0表示行首)
d$>删除光标所在字符到行尾内容;($表示行首)
D>作用同上
dw>删除光标到字符串结束的位置
db>删除光标到字符串开始的位置
dd>删除整行
数字+dd>指定往下删除的行数
d+数字+w>指定删除往后的单词数
cw>删除光标所在到字符串结束的位置,并进入插入模式;
cb>删除光标所在到字符串开始的位置,并进入插入模式;
ciw>删除光标所在字符串并进入插入模式;
d)>删除光标到句末的位置("()“表示句子)
d(>删除光标到句首的位置
d}>删除光标到段末的位置(”{}"表示段子)
d{>删除光标到段首的位置

yw>复制光标到字符串结束的内容
yb>复制光标到字符串开始的内容
yy>复制整行

p>黏贴内容到光标之后的位置
P>黏贴内容到光标之前的位置

r>替换光标所在字符
R>替换光标所在字符,不退出,按Esc退出替换模式

u>撤销上次操作
ctr+r>反撤销

ctr+g>显示相当文件信息(路径,行数,光标所在行数占总百分比)

:w>保存当前文件
:wq>保存并退出
:w!>强制保存

:reg >查看黏贴板中的内容

代码折叠

za>打开or关闭折叠
zM>关闭所有折叠
zR>打开所有折叠

配置文件中的设置:

' indent表示基于缩进进行的折叠
set foldmethod=indent
' Vim启动 时关闭折叠
set nofoldenable

visual模式

v>字符选择模式
V>行选择模式
Ctr+v>块选择模式

注意:

  • Ctr+v进入块选择模式后,I 进入插入模式,可以对同一列进行批量插入操作;
  • V 进入行模式后,< or >可以进行缩进缩出
  • visual模式下,按u将单词全部转换为小写,U全部转换为大写

寄存器

26字符+10个数字,都可以作为对象来寄存数据,只要在"后指定寄存对象;例如"ayiw将当前的光标所在单词,寄存到a,可以通过"ap来调用黏贴;
注意:指定大写寄存器名称,是对该寄存器下的内容进行追加;而小写测试覆盖;
注意:vim中的d删除会寄存删除内容,p可以直接复制刚刚删掉的内容,如果不希望,保留d删除的内容,可以指定"_dw来指定删除;
:reg>查看所有寄存器中的内容

宏既是讲一系列操作记录到指定寄存器中,从而实现重复调用命令的目的

q 寄存器名进入宏录制,q退出宏录制
@ 寄存器名调用指定寄存器中的一系列命令;同样可以通过"寄存器名来调用

打标记(mark)

m 字母来指定使用谁来标记当前位置;

注意:小写字母标记只在当前文件中跳转(局部);大写字母标记位置可以在不同文件中进行跳转(全局)

`字母来跳转到指定标记位置;
'字母来跳转到指定标记位置的行首;
`` 进行回跳;

:marks查看当前的所有标记信息

分屏

:vsp 文件名>垂直分屏
:sp 文件名>水平分屏
Ctr+w v>垂直分屏当前光标所在文件
Ctr+w s>水平分屏当前光标所在文件
Ctr+w c>关闭当前光标所在文件
Ctr+w w>分屏轮流切换文件
Ctr+w h/j/k/l>分屏指定方位切换文件

vscodevim

vscodevim自带插件有easymotion、incsearch、useSystemClipboard、useCtrlKeys、hlsearch;
相关键映射配置见:https://github.com/wzbwzt/myvim
vscodevim使用说明见:这里

注意:这里收集的几个插件都是非常好用的,尤其是easymotion 😃;可以帮助我们实现快速高效的移动到指定位置,具体见说明

插件管理工具vim-plug

vim-plug采用异步多线程来下载安装插件,支持git、标签,可以进行版本回滚操作;
git地址:https://github.com/junegunn/vim-plug

安装plug.vim到.vim/autoload目录下就可以使用;

" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')  //指定存放路径

" Make sure you use single quotes

" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'  

" Any valid git URL is allowed
Plug 'https://github.com/junegunn/vim-github-dashboard.git'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

" Using a non-default branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }

" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" Unmanaged plugin (manually installed and updated)
Plug '~/my-prototype-plugin'

" Initialize plugin system
call plug#end() //标志结束

:PlugInstall>安装所有插件;
:PlugInstall[name...]>指定安装插件
:PlugStatus>查看插件状态
:PlugUpdate[name...]>更新插件
:PlugUpgrade>更新vim-plug自身

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值