点击上方“开源Linux”,选择“设为星标”

回复“学习”获取独家整理的学习资料!

作者:枫上雾棋

链接:https://segmentfault.com/a/1190000011466454

Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插件,而关于 Vim 的简介,主题的选择,以及为何使用 vim-plug 来管理插件等内容,有兴趣的同学下来可以自己了解和对比下。

本文导航

◈ 安装03%

◈ 新手指南04%

◈ 移动光标05%

◈ 退出08%

◈ 删除08%

◈ 修改10%

◈ 撤销11%

◈ 复制粘贴剪切12%

◈ 状态13%

◈ 查找13%

◈ 替换15%

◈ 折叠16%

◈ 执行外部命令17%

◈ .vimrc18%

◈ 基本配置23%

◈ 取消备份23%

◈ 文件编码23%

◈ 显示行号24%

◈ 取消换行24%

◈ 显示光标当前位置25%

◈ 设置缩进25%

◈ 突出显示当前行26%

◈ 查找27%

◈ 左下角显示当前 vim 模式27%

◈ 代码折叠28%

◈ 主题29%

◈ 插件配置32%

◈ 树形目录32%

◈ 代码,引号,路径补全46%

◈ 语法高亮,检查50%

◈ 文件,代码搜索56%

◈ 加强版状态栏59%

◈ 代码注释63%

◈ git69%

◈ Markdown71%

◈ Emmet74%

◈ html 576%

◈ css 377%

◈ JavaScipt82%

◈ React91%

◈ Prettier93%

◈ 总结97%

安装

sudo apt-getinstall vim// Ubuntu

其他平台,可以自行谷歌。

新手指南

vimtutor// vim 教程

上面是史上最简单,最全面的Vim基础教程,至今无人超越。

下面是作者基于上面的归纳:

移动光标

# hjkl
# 2w 向前移动两个单词
# 3e 向前移动到第 3 个单词的末尾
# 0 移动到行首
# $ 当前行的末尾
# gg 文件第一行
# G 文件最后一行
# 行号+G 指定行
# <ctrl>+o 跳转回之前的位置
# <ctrl>+i 返回跳转之前的位置

退出

# <esc> 进入正常模式
# :q! 不保存退出
# :wq 保存后退出

删除

# x 删除当前字符
# dw 删除至当前单词末尾
# de 删除至当前单词末尾,包括当前字符
# d$ 删除至当前行尾
# dd 删除整行
# 2dd 删除两行

修改

# i 插入文本
# A 当前行末尾添加
# r 替换当前字符
# o 打开新的一行并进入插入模式

撤销

# u 撤销
# <ctrl>+r 取消撤销
复制粘贴剪切
# v 进入可视模式
# y 复制
# p 粘贴
# yy 复制当前行
# dd 剪切当前行

状态

#<ctrl>+g 显示当前行以及文件信息
查找
# / 正向查找(n:继续查找,N:相反方向继续查找)
# ?逆向查找
# % 查找配对的 {,[,(
# :set ic 忽略大小写
# :set noic 取消忽略大小写
# :set hls 匹配项高亮显示
# :set is 显示部分匹配

替换

# :s/old/new 替换该行第一个匹配串
# :s/old/new/g 替换全行的匹配串
# :%s/old/new/g 替换整个文件的匹配串

折叠

# zc 折叠
# zC 折叠所有嵌套
# zo 展开折叠
# zO 展开所有折叠嵌套

执行外部命令

# :!shell 执行外部命令

.vimrc

.vimrc 是 Vim 的配置文件,需要我们自己创建:

cd Home               // 进入 Home 目录
touch .vimrc // 配置文件 # Unix
# vim-plug
# Vim
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# Neovim
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

其他平台,可以查看 vim-plug[1]

基本配置

取消备份
set nobackup
set noswapfile
文件编码
setencoding=utf-8
显示行号
setnumber
取消换行
setnowrap
显示光标当前位置
setruler
设置缩进
set cindent
set tabstop=2
set shiftwidth=2
突出显示当前行
setcursorline
查找
set ic
set hls
set is

左下角显示当前vim模式

setshowmode
代码折叠
#启动 vim 时关闭折叠代码
set nofoldenable
主题
syntax enable
set background=dark
colorscheme solarized

◈ altercation/vim-colors-solarized[2]
◈ Anthony25/gnome-terminal-colors-solarized[3]

插件配置

树形目录
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'Xuyuanp/nerdtree-git-plugin' autocmd vimenter * NERDTree
map <C-n> :NERDTreeToggle<CR>
let NERDTreeShowHidden=1
let g:NERDTreeShowIgnoredStatus = 1
let g:nerdtree_tabs_open_on_console_startup=1
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "",
\ "Dirty" : "✗",
\ "Clean" : "︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ } # o 打开关闭文件或目录
# e 以文件管理的方式打开选中的目录
# t 在标签页中打开
# T 在标签页中打开,但光标仍然留在 NERDTree
# r 刷新光标所在的目录
# R 刷新当前根路径
# X 收起所有目录
# p 小写,跳转到光标所在的上一级路径
# P 大写,跳转到当前根路径
# J 到第一个节点
# K 到最后一个节点
# I 显示隐藏文件
# m 显示文件操作菜单
# C 将根路径设置为光标所在的目录
# u 设置上级目录为根路径
# ctrl + w + w 光标自动在左右侧窗口切换
# ctrl + w + r 移动当前窗口的布局位置
# :tabc 关闭当前的 tab
# :tabo 关闭所有其他的 tab
# :tabp 前一个 tab
# :tabn 后一个 tab
# gT 前一个 tab
# gt 后一个 tab

◈ scrooloose/nerdtree[4]
◈ vim-nerdtree-tabs[5]
◈ nerdtree-git-plugin[6]

代码,引号,路径补全
Plug 'Valloric/YouCompleteMe'
Plug 'Raimondi/delimitMate'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }

◈ Valloric/YouCompleteMe[7]
◈ Raimondi/delimitMate[8]
◈ Shougo/deoplete.nvim[9]

语法高亮,检查
Plug 'sheerun/vim-polyglot'
Plug 'w0rp/ale' let g:ale_linters = {
\ 'javascript': ['eslint'],
\ 'css': ['stylelint'],
\}
let g:ale_fixers = {
\ 'javascript': ['eslint'],
\ 'css': ['stylelint'],
\}
let g:ale_fix_on_save = 1 let g:ale_sign_column_always = 1
let g:ale_sign_error = '●'
let g:ale_sign_warning = '' nmap <silent> <C-k> <Plug>(ale_previous_wrap)
nmap <silent> <C-j> <Plug>(ale_next_wrap)

◈ w0rp/ale[10]
◈ sheerun/vim-polyglot[11]

文件,代码搜索
Plug 'rking/ag.vim'
Plug 'kien/ctrlp.vim'

◈ kien/ctrlp.vim[12]
◈ ggreer/the_silver_searcher[13]
◈ rking/ag.vim[14]

加强版状态栏
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes' let g:airline_theme='papercolor'

◈ vim-airline/vim-airline[15]
◈ vim-airline/vim-airline-themes[16]

代码注释
Plug 'scrooloose/nerdcommenter'

# <leader>cc // 注释
# <leader>cm 只用一组符号注释
# <leader>cA 在行尾添加注释
# <leader>c$ /* 注释 */
# <leader>cs /* 块注释 */
# <leader>cy 注释并复制
# <leader>c<space> 注释/取消注释
# <leader>ca 切换 // 和 /* */
# <leader>cu 取消注释 let g:NERDSpaceDelims = 1
let g:NERDDefaultAlign = 'left'
let g:NERDCustomDelimiters = {
\ 'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },
\ 'less': { 'left': '/**', 'right': '*/' }
\ }

◈ scrooloose/nerdcommenter[17]

git

Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'

◈ airblade/vim-gitgutter[18]
◈ tpope/vim-fugitive[19]

Markdown

Plug 'suan/vim-instant-markdown'

let g:instant_markdown_slow = 1
let g:instant_markdown_autostart = 0
# :InstantMarkdownPreview

◈ suan/vim-instant-markdown[20]

Emmet

Plug 'mattn/emmet-vim'

let g:user_emmet_leader_key='<Tab>'
let g:user_emmet_settings = {
         \ 'javascript.jsx' : {
            \ 'extends' : 'jsx',
         \ },
      \ }

◈ mattn/emmet-vim[21]

html 5

Plug'othree/html5.vim'

◈ othree/html5.vim[22]

css 3

Plug 'hail2u/vim-css3-syntax'
Plug 'ap/vim-css-color' augroup VimCSS3Syntax
autocmd! autocmd FileType css setlocal iskeyword+=-
augroup END

◈ hail2u/vim-css3-syntax[23]
◈ ap/vim-css-color[24]

JavaScipt

Plug 'pangloss/vim-javascript'
let g:javascript_plugin_jsdoc = 1
let g:javascript_plugin_ngdoc = 1
let g:javascript_plugin_flow = 1
set foldmethod=syntax
let g:javascript_conceal_function = "ƒ"
let g:javascript_conceal_null = "ø"
let g:javascript_conceal_this = "@"
let g:javascript_conceal_return = "⇚"
let g:javascript_conceal_undefined = "¿"
let g:javascript_conceal_NaN = "ℕ"
let g:javascript_conceal_prototype = "¶"
let g:javascript_conceal_static = "•"
let g:javascript_conceal_super = "Ω"
let g:javascript_conceal_arrow_function = "⇒"
let g:javascript_conceal_noarg_arrow_function = " "
let g:javascript_conceal_underscore_arrow_function = " "
set conceallevel=1

◈ pangloss/vim-javascript[25]
(注:上述脚本中存在特殊字符,有的情况下显示不正确,请直接用上述链接的内容。)

React

Plug 'mxw/vim-jsx'
let g:jsx_ext_required = 0

◈ mxw/vim-jsx[26]

Prettier

Plug 'prettier/vim-prettier', {
\ 'do': 'yarn install',
\ 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql'] }
let g:prettier#config#bracket_spacing = 'true'
let g:prettier#config#jsx_bracket_same_line = 'false'
let g:prettier#autoformat = 0
autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql PrettierAsync
# :Prettier

◈ prettier/vim-prettier[27]

总结

最后,呈上参考配置 .vimrc[28],如果关于 vim 有更好的 idea,欢迎在评论中交流。


[1]: https://github.com/junegunn/vim-plug
[2]: https://github.com/altercation/vim-colors-solarized
[3]: https://github.com/Anthony25/gnome-terminal-colors-solarized
[4]: https://github.com/scrooloose/nerdtree
[5]: https://github.com/jistr/vim-nerdtree-tabs
[6]: https://github.com/Xuyuanp/nerdtree-git-plugin
[7]: https://github.com/Valloric/YouCompleteMe
[8]: https://github.com/Raimondi/delimitMate
[9]: https://github.com/Shougo/deoplete.nvim
[10]: https://github.com/w0rp/ale
[11]: https://github.com/sheerun/vim-polyglot
[12]: https://github.com/kien/ctrlp.vim
[13]: https://github.com/ggreer/the_silver_searcher
[14]: https://github.com/rking/ag.vim
[15]: https://github.com/vim-airline/vim-airline
[16]: https://github.com/vim-airline/vim-airline-themes
[17]: https://github.com/scrooloose/nerdcommenter
[18]: https://github.com/airblade/vim-gitgutter
[19]: https://github.com/tpope/vim-fugitive
[20]: https://github.com/suan/vim-instant-markdown
[21]: https://github.com/mattn/emmet-vim
[22]: https://github.com/othree/html5.vim
[23]: https://github.com/hail2u/vim-css3-syntax
[24]: https://github.com/ap/vim-css-color
[25]: https://github.com/pangloss/vim-javascript
[26]: https://github.com/mxw/vim-jsx
[27]: https://github.com/prettier/vim-prettier
[28]: https://github.com/FengShangWuQi/to-vim/blob/master/.vimrc

- End -

关注「开源Linux」加星标,提升IT技能

打造一款高逼格的Vim神器的更多相关文章

  1. 【FastDFS】如何打造一款高可用的分布式文件系统?这次我明白了!!

    写在前面 前面我们学习了如何基于两台服务器搭建FastDFS环境,而往往在生产环境中,需要FastDFS做到高可用,那如何基于FastDFS打造一款高可用的分布式文件系统呢?别急,今天,我们就一起来基 ...

  2. 如何快速打造一款高清又极速的短视频APP?

    整个短视频的市场规模一直在增长,网络数据显示2018年已经突破100亿大关,在2019年预测将超过200亿.纵观行业,在生活资讯.美食.搞笑.游戏.美妆等领域,短视频流量巨大但竞争激烈,但是在教育.财 ...

  3. 13 款高逼格且实用的 Linux 运维必备工具

    转载于民工哥技术之路 1. 查看进程占用带宽情况 - Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽. 下载:http://sourceforge.ne ...

  4. 分享一款高逼格的Linux磁盘信息查看工具

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 可以使用df命令来显示在Linux.macOS和类Unix系统中挂载的文件系统上有多少可用磁盘 ...

  5. 使用FastDFS打造一款高可用的分布式文件系统

    FastDFS 介绍 参考: http://www.oschina.net/p/fastdfs FastDFS 是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文 ...

  6. Python爬虫,看看我最近博客都写了啥,带你制作高逼格的数据聚合云图

    转载请标明出处: http://blog.csdn.net/forezp/article/details/70198541 本文出自方志朋的博客 今天一时兴起,想用python爬爬自己的博客,通过数据 ...

  7. Vim 神器的打造方式

    Vim 神器的打造方式     [字体:大 中 小]   Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插 ...

  8. 打造一个高逼格的android开源项目——小白全攻略 (转)

    转自:打造一个高逼格的android开源项目 小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看 ...

  9. 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)

          “很多人都不太认可以第三方ORM,因为考虑的点不够全面,没有大用户群体的ORM有保证,这点是不可否认确是事实.但是往往用户群体大的ORM又有不足之处,今天我们就来聊聊关于ORM的话题,打造 ...

随机推荐

  1. Java 进程和线程

    进程和线程 在并发编程中,有两个基本的执行单元:进程和线程.在Java编程语言中,通常并发编程主要与线程有关.但是进程也很重要. 计算机系统通常具有许多活动的进程和线程.即使在只有一个执行核心,因此在 ...

  2. 解释 Spring 框架中 bean 的生命周期?

    Spring 容器 从 XML 文件中读取 bean 的定义,并实例化 bean. Spring 根据 bean 的定义填充所有的属性. 如果 bean 实现了 BeanNameAware 接口,Sp ...

  3. 什么是 spring 的内部 bean?

    只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean. 为了定义 bean,Spring 的基于 XML 的配置元数据在 <property> 或 &l ...

  4. Mybatis入门程序(二)

    1.实现需求 添加用户 更新用户 删除用户 2.添加用户 (1)映射文件User.xml(Mapper)中,配置添加用户的Statement <!-- 添加用户: parameterType:指 ...

  5. pandas - drop()函数

    函数形式:DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors ...

  6. javascript新手实例1-DOM基本操作

    学习javascript好多同学不知道怎么上手,跟着网上的新手教程做了一遍又觉得javascript很简单,但是真正自己用起来又觉得写不出什么东西,我觉得学习最好的方法就是跟着有趣的例子做,所以我们的 ...

  7. 制作html5微信页面的经验总结。

    先罗列一下我遇到的问题: 用户可选择图片上传,但是图片比较大(基本都是2M以上),而且还得异步上传. 由于操作上比较多的设计都是隐性的例如滑动之类,需要手势动画作提示. 块内元素滚动时不流畅,或不能滚 ...

  8. IDEA中 mybatis-config、applicationContext.xml、log4j.properties、SpringMVC等文件没有图标标识符号,不是一个xml文件

    1. 举例说明 mybatis-config.xml文件不显示图标,识别不出该xml文件 2. 解决办法 1)先点击 File -> Settings-,然后贴入下面代码 (2) 具体操作如下图 ...

  9. 修改django配置文件settings

    默认带数据库sqlite DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join ...

  10. kubectl scale 一次缩容调整过程

    查看master环境相关信息一.版本信息 [root@master-web-38 ~]# kubectl versionClient Version: version.Info{Major:" ...