快!用Vim
文章目录
简介 基操 移动 删改查 搜索替换 多文件操作 text object 赋值粘贴 macro 补全 配色
自定义配置
插件
Tmux neovim
简介
在 Linux 平台使用 Vim 编辑器,成为NB Vimer 安装 vim 就不介绍了
基操
三种模式
inserta: append
i: insert 光标处
o: open a line below
A: append after line
I: insert before line
O: append a line above
normal(default) / command
:w
:q
:set nu
:vs
:sp
:% s/java/python
u
visualv: visual 选择字母
V: 选中整行
Ctrl+v: 块状选择
出错了
输入时,某个单词输错怎么办? 相关快捷键ctrl+h
ctrl+w
ctrl+u
insert -> normal
ESC ctrl+c ctrl+[ 可以配置自己喜欢的键位 回到上一次编辑的位置
准确来说是上一次退出 insert 模式的位置:gi
,继续编辑
移动
均是在 normal 模式下 快速移动
上下左右 w/W
移动到下一个 word 开头,e/E
移动到下一个 word 结尾,b/B
回到上一个 word 开头
小写表示以非空白符分割的单词,比如这句 java __! python go
,还会移动到!
前 大写表示以空白符分割的单词,只会移动到 j _ p g
前;不必纠结,能动就行 0
行首,$
行尾gg
文首,G
文尾 行间搜索移动
normal 模式下,f{char}
搜索并移动到 char 的位置,默认搜索光标往后的; ,
前一个,;
后一个 F{char}
往前搜,,
后一个,;
前一个 页面移动
ctrl+f
向下翻页,ctrl+u
向上翻页zz
把当前行滚动到屏幕(terminal)中间H/M/L
光标移动到屏幕 开头/中间/结尾 命令很多,不需要刻意记忆,经常使用即可!
可以看到很多命令都是在 normal 模式下,大部分情况也都是在浏览,而非编辑
删改查
都是在 normal 模式下 删除
dw
删除单词(非空白符分割),diw
删除单词,保留空格x
删除字符,可配合v
模式使用dd
删除整行,ndd
删除 n 行dt{char}
删除,直到 char 字符处(不包括char) 修改
r
替换,例如:ra
将光标处字符替换成 a;R
打开替换模式s
删除光标处字符并进入插入模式;S
删除整行并进入 insert 模式cw
删除单词并进入 insert 模式 查找 /{string}
搜索字符串 string,n
搜下一处,N
搜上一处 *
当前单词的下一个匹配,#
当前单词的上一个匹配
搜索替换
命令模式下 格式::[range]s/{pattern}/{string}[flags]
,range 表示替换范围,:10,20
表示10-20行,%
表示全部文本 例如::20,23 s/python//n
,会显示匹配到多少行 使用正则::25,27 s/\<abc\>//n
完全匹配 flag 还有c
和g
模式,表示询问和全局替换;flag 可以不写
多文件操作
几个概念
buffer:缓冲区 window:窗口,一个缓冲区可以存在于多个小窗口,大窗口(整个屏幕)可以打开不同的缓冲区 tab:标签页,分类文件 Buffer
打开一个文件,其实就创建了一个缓冲区;使用 :e xxx.txt
就打开并进入另一个缓冲区;使用 :ls
查看 跳转::b 1
跳转到第一个缓冲区;:blast
跳转到最后一个缓冲区;类似的还有 :bpre
:bnext
:bfirst
窗口和缓冲区 buffer 可以和文件等价 Window
分割方法前面说过,:vs
,:sp
;还可以用 ctrl+w+v
ctrl+w+s
窗口间切换 一个缓冲区可以存在于多个小窗口;但操作时都是同步的 注:一个缓冲区只能有一个文件,如果使用 :vs xxx.txt
切开窗口打开其他文件,也会同时增加一个 buffer,只不过此时一个窗口包含了多个buffer 窗口编排;好像没作用? Tag
相当于分类标签,将不同类的文件(buffer)聚在一起,在各自标签里可打开不同buffer(文件)切多个窗口;不常用 使用 :tabnew hello.py
可以在新的标签打开文件 常用命令
text object
和主流编程语言的面向对象类似,vim 将文本视作对象,自然也就有操作对象的方法 比如一个单词,一个句子,一段话都是对象,可以使用方法快速修改删除 命令格式:[number]+<command>+模式+[text object]
command 包括:d(delete)/c(change)/y(yank)/v(visual)
text object 包括:w(word)/s(sentence)/p(paragraph)
常用命令
viw
选中当前单词,不包括空格;vw
会选中当前单词到下一个字符分割起始位置(一般不用) 操作成对括号/引号中 的内容;比如 vi"
快速选中当前位置双引号中的内容,ci"
快速删除双引号中的内容并进入 insert 模式
赋值粘贴
normal 模式 insert 模式,一般使用 ctrl+v
删掉的东西放在寄存器 :reg a
查看 a 寄存器保存的内容,"a p
粘贴 a 中保存的内容 :set clipboard=unnamed
可以直接复制粘贴系统剪贴板
macro
什么是宏 如何录制并回放 需求:给每行文本加上双引号
qa
使用 a 寄存器录制I
加双引号,A
加双引号q
退出录制到下一行,VG
全选 :normal @a
在选中行回放 上面在命令行模式下执行了 normal 模式的命令,我们完全可以使用这种方式完成需求
VG
:normal I"
给所选行开头加双引号:
ctrl+p
回到上一个命令改为 A"
给末尾加上双引号
补全
ctrl+n
根据文件中已存在的单词补全;如果有多个匹配项会提示,ctrl+p
选择下一个 ctrl+x+f
列出路径下的文件(夹)
配色
现在的编辑器都支持更换主题,Vim 也不落后 举例 可以自己下载配色并使用,有教程
自定义配置
映射
映射非常强大且复杂,掌握一些常见用法即可 基本映射 模式映射;例如在insert模式下使用normal的命令::imap <c-d> <Esc>ddi
ctrl+d 删除一行(回到normal再回来) 注:要注意递归映射 和映射冲突 非递归映射:no recursion map 总而言之,只能用 nnoremap/vnoremap/inoremap
插件
什么是插件 安装 vim-plug 插件管理器 参考官方给的 Usage,只保留这两行 第一个插件
vim-startify,开屏工具 修改配置文件并生效::source ~/.vimrc
,安装::PlugInstall
就是把需要安装的插件加入插件列表 即可,非常简单 直接通过 vim
命令就可以看到效果 如何寻找需要的插件?常用的三种方式,推荐第二种;一般先有需求,再找插件
常用插件
美化插件
良好的布局和配色让我们身心愉悦 上面安装的 vim-startify 美化了启动界面 vim-airline,美化状态栏 indentline 代码缩进线 hybrid 主题配色;~/.vimrc
添加 colorscheme hybrid
文件目录插件
nerdtree 目录树 vim
然后 :NERDTree
,就可以看到目录 每次敲命令太麻烦,加一些配置,就可以用 ctrl+t
打开目录,并显示隐藏文件 ,+n
从打开文件中返回目录树,ctrl+w+p
再返回文件可以添加配置 autocmd VimEnter * NERDTree
让我们打开文件时就出现目录树 如何通过搜索快速找到文件?安装 ctrlp 配置:let g:ctrlp_map = '<c-p>'
使用 ctrl+p 开始搜索,打开文件后使用 ctrl+f
定位到目录树 跳转插件
在文件内快速跳转到某一处,可以使用移动命令,或者 /
搜索 这里使用插件:easymotion,添加配置:nmap ss <Plug>(easymotion-s2)
直接输入 ss
即可开始搜索,高亮出匹配的位置 成对编辑插件
normal 模式下修改成对的内容,比如双引号 vim-surround ys iw "
给选中单词加双引号(you add a surrounding),其实是使用了 visual 模式cs " '
替换为单引号ds "
删除双引号 模糊搜索插件
在项目中搜索一些文本,这里使用 fzf 我们要安装 fzf 和 fzf.vim 使用:vim
,:Ag [pattern]
模糊搜索字符串 ,使用::Files [path]
模糊搜索目录(相当于前面的 ctrl+p) 搜索替换插件
go
python
jedi-vim 或者 python-mode python-mode 支持的一些配置;ctrl+]
跳转到定义处 用起来,才能遇到问题,才能熟练
浏览
代码大纲插件,tagbar,还需要安装依赖 Universal Ctags 使用 :TagbarToggle
召唤出右侧大纲 高亮单词插件 lfv89 k
高亮所在单词,K
取消高亮
补全
格式化
通用 代码格式化插件 neoformat例如 pip
安装 autopep8 格式化 python 代码,打开文件使用 :Neoformat
let g:neoformat_python_autopep8 = {
\ 'exe' : 'autopep8' ,
\ 'args' : [ '-s 4' , '-E' ] ,
\ 'replace' : 1 , " replace the file, instead of updating buffer (default: 0)
\ 'stdin': 1, " send data to stdin of formatter ( default: 0 )
\ 'env' : [ "DEBUG=1" ] , " prepend environment variables to formatter command
\ 'valid_exit_codes' : [ 0 , 23 ] ,
\ 'no_append' : 1 ,
\ }
let g:neoformat_enabled_python = [ 'autopep8' ]
通用静态检查插件 ale 如果想检查 python,还需要安装 pylint
;但是 pylint 的检查很严格,可以修改配置忽略一些错误 代码注释插件:vim-commentary,使用 gc
即可注释或取消注释
git
在 vim 中使用 git 的插件:fugitive 使用也很简单,:Gblame
,:Gdiff
,:Gcommit
等 另一个插件:gitgutter,可以标记出修改、新增等 第三个插件:gv.vim,使用::GV
就可以看到提交信息 到此,介绍了很多插件,也还有很多好用的插件没提到,但是这个东西不在于多而在于满足自己的需求,经常使用达到熟练,提高效率才是目的
Tmux
分屏,托管进程;可以让我们在一个窗口操作多个进程 使用手册 也可以将 vim 嵌入到开发工具中,比如 pycharm,vscode等
neovim
原始的 vim 代码老旧,不支持异步等 所以有了搞了 Neovim,官网,可以尝试使用 还有一些大佬写好的 Vim 配置
抛砖引玉,有好的建议或者配置可以评论分享
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187096.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!