vim-notes


vim安装及配置

从零开始

如果想要从零开始学习vim的话推荐看看这个视频

安装

这里使用neovim

  1. install
brew install neovim
  1. upgrade
brew update
brew upgrade neovim
  1. use
nvim

配置

  1. neovim 配置文件路径是 ~/.config/nvim/init.vim(没有的话自己新建)这个的内容和vim的.vimrc内容是一样的
  2. 换个主题 这里我用的是janah这种主题很多自己找喜欢的就行
    1. 先把对应的主题下载下来然后把主题的.vim文件放在~/.config/nvim/colors下(或者~/.vim/colors下)
    2. 在init.vim 里面加入
    syntax on
    autocmd ColorScheme janah highlight Normal ctermbg=235
    colorscheme janah
    如果用zsh的同学需要注意你的zsh主题最好要和neovim主题一样不然显示可能会有点问题
  3. 可以在github上看一些高手的init.vim设置

https://github.com/TimothyYe/mydotfiles/blob/master/neovim/.config/nvim/init.vim

插件

以下所讲的都是针对原生vim或者neovim的

  1. 安装
    先装 vim-plug
    装好后在~/.config/nvim/init.vim 里面写需要的插件下面是neovim的demo具体的查看官方文档 这里如果begin里面不写地址的话默认的是~/.config/nvim/这个路径
call plug#begin('~/.local/share/nvim/plugged')
" My Bundles:
Plug 'kien/ctrlp.vim'
call plug#end()
  1. vim-plug 常用命令
    以下命令在vim中使用 例如 :PlugUpdate
PlugUpdate #下载更新插件
PlugClean #清除不用的目录
PlugUpgrade #更新vim-plug自身

推荐的插件

好的vim插件可以上 awesome vim

  1. vim-plug Vim的插件管理器,支持并发安装和更新
  2. EasyMotion 在当前文件中快速移动光标到指定查找位置的插件,十分方便和高效
快捷键 功能
<leader><leader> w Start of word forwards
<leader><leader> b Start of word backwards
<leader><leader> j Start of line forwards
<leader><leader> k Start of line backwards
/ search by words next n preview N

最后一个需要配置 在 .vimrc里加入

map  / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)

" These `n` & `N` mappings are options. You do not have to map `n` & `N` to EasyMotion.
" Without these mappings, `n` & `N` works fine. (These mappings just provide
" different highlight method and have some other features )
map  n <Plug>(easymotion-next)
map  N <Plug>(easymotion-prev)
  1. Vim-Startify Vim启动首屏自定义插件,让你的Vim启动后显示别具一格的首屏样式
    注: 有些主题会使 vim-startify显示不正常

  2. NERDTree Vim中的文件管理器,方便编辑文件,创建目录,删除和修改文件等等……
    快捷键需要设置

map <F2> :NERDTreeToggle<CR>
nmap <leader>f :NERDTreeFind<CR>
nmap <leader>g :NERDTreeToggle<CR>
快捷键 功能
F2 shownerdtree
;g show nerdtree
;f find file in the sidebar
  1. CtrlP 不可缺少的快速跳转插件,它可以快速的帮助我们找到项目中的文件。在vim normal模式下,按下ctrl+p,然后输入你要寻找的文件就行了。
快捷键 功能
<c-d> 以文件名搜索
<c-j> <c-k> 在查询中搜索
<c-z> <c-o> Use <c-z> to mark/unmark multiple files and <c-o> to open them.
  1. NERDTreeCommenter 方便的用来注释代码的插件
[count]<leader>ci |NERDComInvertComment|
  1. [Ack] 全文搜索插件,可以在当前打开的项目中进行源码的全文搜索,并可以在搜索结果中方便的切换和打开源码文件,十分方便。
:Ack xxx * ,在项目里搜索xxx单词.
:ack
  1. TagBar 查看当前代码文件中的变量和函数列表的插件,可以切换和跳转到代码中对应的变量和函数的位置k
"tagbar
" toggle TagBar with F8
nnoremap <silent> <F8> :TagbarToggle<CR>
" set focus to TagBar when opening it
let g:tagbar_autofocus = 1
  1. AutoPairs 自动补全括号的插件,包括小括号,中括号,以及花括号,可以提升编码效率
  2. Surround 快速给词加环绕符号,例如单引号/双引号/括号/成对标签等的插件
ds  - delete a surrounding
cs  - change a surrounding
ys  - add a surrounding
  1. Vim-Airline Vim状态栏插件,包括显示行号,列号,文件类型,文件名,以及Git状态
  2. deoplete 自动补全插件,写代码必备,有了这个插件,就有了IDE的感觉
  3. Vim-Indent-Guides 显示代码对齐的引导条
  4. Accelerated-Smooth-Scroll 顾名思义,让Ctrl+F,Ctrl+B的滚屏来得更顺滑一些……
  5. vim-autoformat
  6. ale 代码静态检查

管理dotfiles

使用homeshick
常用命令

homeshick generate dotfiles #创建
homeshick cd dotfiles
homeshick track dotfiles .bashrc #添加
homeshick clone git@github.com:lossss/dotfiles.git #新机拷贝

vim 中常用的快捷键

insert mode

快捷键 功能
ctrl+w 删除当前单词
ctrl+u 删除当前行

移动

超常用的hjkl就不必多说了

快捷键 功能
0 (数字 0)移动光标至本行开头
^ 移动光标至本行第一个非空字符处
$ 移动到行尾
gg 最上面一行
G 最下面一行
gi 移动到最后一次编辑的地方
NG 跳到第N行(绝对行数)
zz 将当前行移动到显示屏中间
:15 跳转到15行
w 向前移动一个词 (上一个字母和数字组成的词之后)
W 向前移动一个词 (以空格为单位)
e 跳到这个单词的末尾
b 向后移动一个词 (下一个字母和数字组成的词之前)
f 搜索例如fw就会移动到这一行中出现的第一个w 使用;查找下一个,查找上一个
t 搜索例如fw就会移动到这一行中出现的第一个w前一个字母 使用;查找下一个,查找上一个
% 跳到对应的(, (, [ 处
* 跳到当前光标的下一个(上一个) 相同单词的地方
ctrl+f full page forward
ctrl+b full page back
ctrl+o 回到上一个跳跃点 :jumps可以查看跳跃记录
ctrl+u (up)half page forward
ctrl+d (down)half page back
ctrl+v visual block mode
shift + ] 移动到下一个空行
shift + [ 移动到上一个空行
vii 全选

w w e e 的区别

查询

快捷键 功能
// 查询 n移动到下一个匹配 N移动到上一个匹配
# 移动到下一个匹配单词
* 移动到上一个匹配单词

删除

快捷键 功能
d 删除 dta 删除至a字符
x 删除当前的字符
X 向前删除

修改

快捷键 功能
i 词前插入
shift+i 行首插入
a 词后插入
shift+a 行尾插入
. .可以重复执行上个指令 比如fw之后.就会继续移动到下一个w的位置
s 替换 按下之后会删除当前的字符并进入insert模式
S 删除一整行
3dd 剪切3行
p 黏贴
ctrl+shift+v / 鼠标中键 从clipboard粘贴
u 撤销相当于ctrl+z
ctrl+r 相当于ctrl+y
ZZ 保存并退出
dt" 删除直到"
J 删除换行符,合并两行
< > 调整代码缩进
= 自动格式化代码缩进
zc 折叠代码
zo 展开带代码
shift+v 选择当前行
shift+d 删除至行尾
g, 回到上一次insert的位置
gd 跳转到函数定义

text-object

a和i的区别

an object:包含尾部间隔空格
inner object:只是内容本身,不包含尾部单词间隔空格

word / sentence / paragraph

textobject 说明
w word
s sentence
p paragraph

block / Block

textobject 说明
]/[ [] block
)/(、b block
>/<、>/< <> block
}/{、B Block
t tag block:<> </>

visual mode

在可视选择模式下,可以以 v 做前缀,a 或 i 限定边界,后续指定操作对象,来实现针对文本对象的选择:

指令 说明
viw 选中单词
vis 选中句子
vit 选中html标签内的内容
vip 选中段落
vi( 选中圆括号中的内容
vi[ 选中中括号之间的内容
v2i{ 选中两层大括号之间的所有内容 数字限定选择的嵌套层数
v3aw 选择三个单词(包含中间的2个间隔空格)
v3iw 选择三个单词(2个单词+间隔空格)
另外,可将 v 选择操作指令替换为 c、x、d、y 等操作符(operator),来针对文本对象操作

小tips

  1. 多行同时编辑:

按 ctrl+v ,进入 Visual Block mode

然后按hjkl 选择对应的行 当然你也可以用 5k等等选择

然后 shift+i(单词之前) 或者 shift+a(单词之后)

如果要在多行行首插入的话要先shift+v 然后 选择多行 再按shift+i 行尾就是shift+a

  1. 全选复制
    esc后 ggyG

  2. 全选删除
    esc后 dG

  3. 选中当前的单词
    viw //inner word
    diw //删除当前单词

  4. 在vim中
    esc = ctrl+[ 当然 ctrl+v 也可以用来切换模式

  5. shift+/ 搜索
    *向前搜索 #向后搜索

  6. 修改 gem ‘hello’ '‘中的内容
    ci’
    关于这个可以参考 一起来说vim语

  7. 注释代码 行注释gc2j 块注释gC2j

  8. 清空一行 而不删除这行
    normal mode 0D // 0 至行首 shift+d 清空

  9. 插入新的一行而不进入insert mode
    yy一个空行再p

  10. 多文件操作

window 常用操作
:sp 横分屏
:vs 竖分屏
:sp filepath 分屏打开文件

buffer 常用操作
:buf 2 第二个 buffer
:bn 下一个 buffer # 自定义 <c-n>
:bp 上一个 buffer # 自定义 <c-N>
:bd 关闭当前 buffer

11. 大小写转换
guu 整行小写
gUU 整行大写
如果只想对个别单词大写小写则先选中即可
如果光标在当前单词 guiw gUiw


12. 选中单词
如果想要选中类似 $("#selector").show() 时  按键操作 F space v E(f space)

常用command

使用: 可以使用不同的指令进行复杂的操作

command meaning
%s/word1/word2/gc 全文查找word1 替换为 word2 每次替换会要求check

.vimrc

在~/.vimrc(没有可以自己新建)加入以下内容
这个就是vim的配置文件

set number
set relativenumber
set hlsearch

这样启动vim时就会加载这些设置 当然一些大佬也会共享自己的配置到github上
这里列出的几个只是冰山一角

Search and Replace

hlsearch

You can search by using the / command in Normal mode. By typing /This, you will see all of the This words

By typing n, your cursor goes to the next occurrence of the search pattern. By using N, you can go back to a previous occurrence.

The format is /<search pattern>/<replace pattern>/gi where the <search pattern> and the <replace pattern> are standard regular expressions.The i after the g makes the search case insensitive. An I would make the search case sensitive. The g makes the substitution global in the line. Without the g, it performs the substitution once per line

vscode vim plugin

vim-surround

Surround Command Description
d s <existing char> Delete existing surround
c s <existing char> <desired char> Change surround existing to desired
y s <motion> <desired char> Surround something with something using motion (as in “you surround”)
S <desired char> Surround when in visual modes (surrounds full selection)

hint: ysaw)

参考

https://linux.cn/article-8144-1.html

http://www.oschina.net/translate/learn-vim-progressively

https://computers.tutsplus.com/tutorials/vim-for-beginners--cms-21118

http://col.dog/2015/12/13/vim-tutorials-006-text_objects/

https://xiaozhou.net/learn-the-command-line-vim-2018-08-08.html


文章作者: losss
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 losss !
评论
  目录