如何配置vim(设置快捷键,自定义主题,安装插件)_vim使用gruvbox主题-程序员宅基地

技术标签: 编辑器  linux  vim  

vim是一款轻量级的编辑器,并且有着强大的插件群。其强大的自定义快捷键功能,可以让你不碰鼠标的情况下,实现各种编辑操作。

vim的配置目录

.vimrc是vim的配置文件, 用户需要修改这个文件来对vim进行个性化设置

vimrc配置文件分系统配置和用户配置两种。

系统vimrc配置文件存放在Vim的安装目录,我的vim是8.0版本的,我的系统vimrc配置文件的路径为/usr/share/vim/vim80/.vimrc。其中vim80根据版本号不同,后面的数字也略微不同

用户vimrc文件,存放在用户主目录下~/.vimrc。首次使用时,是没有这个文件的,需要用户自己创建 .vimrc文件

.vim文件夹是存放vim的资源文件夹,其所在目录为/usr/share/vim/vim80/.vim

你也可以在用户文件夹~/下创建.vim文件夹,这样,.vim文件夹下的资源只对当前用户有效。

以下是.vim文件夹下的目录结构

目录 用途
autoload 自动载入脚本(autoload scripts)
colors 配色方案,自定义主题需要这个文件夹
compiler 编译命令:compiler使用的脚本文件
doc 文档
ftplugin 针对特定类型文件的插件(需要配合:filetype plugin命令使用)
indent 自动缩进定义文件
keymap 命名格式为 {language}[-{layout}][_{encoding}].vim 的Keymap文件
lang 界面显示语言文件(英文、中文等)
macros 宏示例(hanoi、maze、urm等),小工具(justify、matchit、swapmous等)
plugin 插件
syntax 语法高亮度文件
tools 工具(unicode、vimspell等)
tutor 入门教程

vim的基本配置命令

要配置你的vim就是要修改你的.vimrc配置文件

切换到用户目录cd ~

打开.vimrc配置文件vim .vimrc, 没有这个文件的话先创建touch .vimrc

将你想要的效果加入到你的.vimrc文件中即可
在这里插入图片描述

下面是一些常用的配置

字体和颜色
"自动开启语法高亮"
syntax enable

"设置字体"
"set guifont=dejaVu\ Sans\ MONO\ 10
set guifont=Courier_New:h10:cANSI

"设置主题样式"
"colorscheme desert

"高亮显示当前行"
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00
文字处理
"使用空格来替换Tab"
set expandtab

"设置所有的Tab和缩进为4个空格"
set tabstop=4

"设定<<和>>命令移动时的宽度为4"
set shiftwidth=4

"使得按退格键时可以一次删除4个空格"
set softtabstop=4
set smarttab

"缩进,自动缩进(继承前一行的缩进)"
"set autoindent 命令打开自动缩进,是下面配置的缩写
"可使用autoindent命令的简写,即“:set ai”和“:set noai”
"还可以使用“:set ai sw=4”在一个命令中打开缩进并设置缩进级别
set ai
set cindent

"智能缩进"
set si

"自动换行”
set wrap

"设置软宽度"
set sw=4

"行内替换"
set gdefault

Vim 界面

"显示标尺"
set ruler

"设置命令行的高度"
set cmdheight=1

"显示行数"
set nu

"不要图形按钮"
set go=

"设置魔术"
set magic

"关闭遇到错误时的声音提示"
"关闭错误信息响铃"
set noerrorbells

"关闭使用可视响铃代替呼叫"
set novisualbell

"高亮显示匹配的括号([{和}])"
set showmatch

"匹配括号高亮的时间(单位是十分之一秒)"
set mat=2

"搜索逐字符高亮"
set hlsearch
set incsearch

"搜索时不区分大小写"
"还可以使用简写(“:set ic”和“:set noic”)"
set ignorecase

"用浅色高亮显示当前行"
autocmd InsertLeave * se nocul
autocmd InsertEnter * se cul

"输入的命令显示出来,看的清楚"
set showcmd
编码设置
"设置编码"
set encoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

"设置文件编码"
set fileencodings=utf-8

"设置终端编码"
set termencoding=utf-8

"设置语言编码"
set langmenu=zh_CN.UTF-8
set helplang=cn
其他设置
"在处理未保存或只读文件的时候,弹出确认"
set confirm

"隐藏工具栏"
set guioptions-=T

"隐藏菜单栏"
set guioptions-=m

"显示状态栏(默认值为1,表示无法显示状态栏)"
set laststatus=2

"状态行显示的内容"
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

"设置背景颜色"
set background=dark

"共享剪切板"
set clipboard+=unnamed

"从不备份"
set nobackup
set noswapfile

"自动保存"
set autowrite

"关闭vi兼容模式"
set nocompatible

"设置历史记录步数"
set history=1000

"激活鼠标的使用"
set mouse=a
set selection=exclusive
set selectmode=mouse,key

vim设置快捷键

**前缀键:**vim 自带有很多快捷键,再加上各类插件的快捷键,大量快捷键出现在单层空间中难免引起冲突,为缓解该问题,引入了前缀键 ,默认的前缀键是\,你可以将 let mapleader=";"加入到你的配置文件,修改你的前缀键为;

映射: 通过映射,你可以定义自己的快捷键,让你的vim用起来更加顺手。

例如:在你的配置文件中加入 nmap <Leader>wq :wq<CR> 当你在普通模式下,按下;wq就会自动保存并退出文件。(前提是你将设置为了;

这是我的快捷键设定。

在这里插入图片描述

vim制定了多种映射规则

  • :imap:只在 Insert 模式下生效的快捷键
  • :cmap:只在 Command-line 模式下生效
  • :nmap:只在 Normal 模式下生效
  • :vmap:只在 Visual 模式下生效
  • :map:在以上所有模式下生效
  • :noremap:包含 :inoremap:nnoremap 等,非递归映射

按键对应名称

名称 对应按键
<C-s> Ctrl+s
<S-s> Shift+s
<BS> 退格键
<Tab> 制表键
<CR><Enter><Return> 回车
<Esc> Escape
<Space> 空格键
<Up> 上方向键
<Down> 下方向键
<Left> 左方向键
<Right> 右方向键
<F1> - <F12> 功能键 F1 到 F12
#1, #2..#9,#0 F1 到 F10
<Insert> Insert
<Del> Delete
<Home> Home
<End> End
<PageUp> 上翻页
<PageDown> 下翻页

vim自定义主题

系统自带的主题

进入vim,在普通模式下输入 :colorscheme desert切换主题。

在这里插入图片描述

你也可以在 .vimrc文件中加入colorscheme desert, 这样就不用每次都切换主题了。

vim内置了许多主题,在/usr/share/vim/vim80/colors文件夹下,其中vim80根据版本号不同,后面的数字也略微不同

在这里插入图片描述

colors文件夹下以.vim结尾的都是vim的内置主题。

导入外部主题

以我正在用的gruvbox主题为例,教大家如何操作。

在这里插入图片描述

先切换目录 cd ~/.vim/color 没有这个目录的话就先自己创建mkdir -p ~/.vim/color

然后执行命令git clone https://github.com/morhetz/gruvbox.git 下载主题

然后执行 cp gruvbox/colors/gruvbox.vim ~/.vim/colors/ 将下载的主题文件复制到~/.vim/colors文件夹下。

~/.vimrc文件中加入

colorscheme gruvbox
set background=dark

至此大功告成。

vim插件

vim-plug 是一个插件管理器,我们可以通过vim-plug轻松管理我们的插件。

使用 vim-plug 安装插件

安装 vim-plug,以便它在启动时自动加载:

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

执行命令后 会将plug.vim文件下载到 ~/.vim/autoload/ 文件夹下

通过vim-plug安装NERDTree插件

NERDTree是一款用来在Vim界面显示树形目录的文件管理器插件,可在vim操作界面进行文件打开、目录浏览操作。
在这里插入图片描述

~/.vimrc 文件中,加入以下文本:

call plug#begin()
Plug 'preservim/NERDTree'
call plug#end()

启动 Vim ,然后键入如下命令:

:PlugInstall

执行:Pluginstall时出现错误 Cannot write, ‘buftype’ option is set

解决方法:
可用下面的命名查看buftype的设置,当buftype=nofile时,不能保存文件,只有当buftype=空时,才可以保存

:verbose set buftype

修改buftype的方法:vim切换至ex模式,输入:setlocal buftype=

NERDTree 的使用
  • 输入:NERDTree打开目录树

  • 多次按"ctrl+w",光标自动在左右侧窗口切换

  • 和编辑文件一样,通过h j k l移动光标定位

  • i和s可以水平分割或纵向分割窗口打开文件,前面加g类似go的功能

  • t 在标签页中打开

  • T 在后台标签页中打开

  • p 到上层目录

  • P 到根目录

  • K 到同目录第一个节点

  • J 到同目录最后一个节点

  • m 显示文件系统菜单(添加、删除、移动操作)

  • ? 帮助

  • q 关闭

通过NERDTree 你可以很方便的打开多个文件,通过设置快捷键,可以让你很方便地在多个文件中切换。

"打开文件目录
 nmap <C-t> :NERDTree<CR>
 "切换到下一个标签页
 nmap <C-k> :tabnext<CR>
 "切换到上一个标签页
 nmap <C-j> :tabprevious<CR>
 "关闭当前标签页
 nmap <C-x> :tabclose<CR>
 "新建标签页
 nmap <C-n> :tabnew

完整.vimrc配置文件如下:

set tabstop=4
set softtabstop=4
set shiftwidth=4
set noeb
set noerrorbells
"主题"
" colorscheme desert"
set background=dark
"这个主题需要下载"
colorscheme gruvbox

"自动开启语法高亮"
syntax enable

"开启新行时使用智能自动缩进"
set smartindent

"高亮显示匹配括号"
set showmatch

"默认按下Esc后,需要等待1秒才生效,"
" 设置Esc超时时间为100ms,尽快生效"
set ttimeout
set ttimeoutlen=100

" 突出显示当前行"
set cursorline
autocmd InsertLeave * se nocul
set nu

"命令模式下的自动补全"

set wildmenu
set wildmode=longest:list,full

"显示状态栏(默认值为1,表示无法显示状态栏)"
set laststatus=2

"状态行显示的内容"
set statusline=%F%m%r%h%w\ [FORMAT=%{
    &ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{
    strftime(\"%d/%m/%y\ -\ %H:%M\")}

"va代码编译执行"
autocmd BufNewFile,BufReadPre *.java nnoremap <leader>r :w<cr>:!javac %<cr>:!java %:r<cr>
" 定义前缀键的前缀,即<Leader>"
let mapleader=";"
inoremap jk <esc>
" 不做任何保存,直接退出 vim"
nmap <Leader>q :qa!<CR>
" 定义快捷键保存当前窗口内容"
nmap <Leader>w :w<CR>
" 保存并退出"
nmap <Leader>wq :wq<CR>

" NERDTree 的快捷键"
"打开文件目录"
nmap <C-t> :NERDTreeToggle<CR>
"切换到下一个标签页"
nmap <C-k> :tabnext<CR>
"切换到上一个标签页"
nmap <C-j> :tabprevious<CR>
"关闭当前标签页"
nmap <C-x> :tabclose<CR>
"新建标签页"
nmap <C-n> :tabnew
" 插入模式下使用 <BS>、<Del> <C-W> <C-U>"
set backspace=indent,eol,start

"新建*.java文件,自动插入文件头"
autocmd BufNewFile *.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头"
func SetTitle()
    if expand ("%:e") == 'java'
        call setline(1, "/**Author:goodbye")
        call setline(2, " *Time:".strftime("%F %T"))
        call setline(3, "Name:".expand("%")."*/")
        call setline(4, "")
        call setline(5, "public class ".expand("%:r")."{")
        call setline(6, "")
        call setline(7, "}")
    endif
endfunc

"插件们"
call plug#begin()
"文件树插件"
Plug 'preservim/NERDTree'
call plug#end()

上面这个配置文件的主要功能包括:
编辑模式下 快速按下jk 返回Normal模式,相当于ESC键。
普通模式下 快速按下;q 不保存直接退出vim相当于:qa!
普通模式下 快速按下;w 保存不退出,相当于:w
普通模式下 快速按下;wq 保存并退出,相当于:wq

按下 Ctrl + t 键,打开或关闭文件树。
按下 Ctrl + k 键,切换到下一个标签页。
按下 Ctrl + j 键,切换到上一个标签页。
按下 Ctrl + x 键,关闭当前标签页。
按下 Ctrl + n 键,新建一个标签页

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_52383454/article/details/122798294

智能推荐

谈谈对服务化的理解-程序员宅基地

文章浏览阅读391次,点赞5次,收藏5次。首先:服务化是什么,为什么要服务化服务化是一种将业务、功能或流程抽象为服务的设计方法,通过服务之间的协作和调用来实现系统的整合和复用。它可以提高系统的可维护性和扩展性,主要用来构建分布式系统。然后:怎样服务化SOA和微服务都是实现了服务化的、比较典型的架构风格。SOA的出现是为了解决功能复用的问题,将一些通用的模块提取出来做成服务。但是SOA对于通用模块的设计没有设计核心原则,因此在对应需求变化等...

关于thinkphp的__construct和_initialize-程序员宅基地

文章浏览阅读128次。先说一下__construct吧,construct是php的构造函数,每次new这个类的时候会运行这个函数,子类继承父类时,如果子类中没有construct的时候,会自动调用父类的,如果有,则调用子类的,如果想调用父类的要加parent::__construct()。_initialize()是thinkphp特有的函数,注意是只有一个下划线_而已!这个函数只会在此class有继承父类的..._call to protected yzh\baseclient::__construct() from context 'user\controlle

aes加密工具类-程序员宅基地

文章浏览阅读5.1k次。import javax.crypto.*;import javax.crypto.spec.SecretKeySpec;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;public class AesUtil {_aes加密工具类

enable cef support ffmpeg_cefpython ffmpeg-程序员宅基地

文章浏览阅读1.9k次。refefences:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding这里有源码包列表。如果automate-git.py git下载失败,只能申请海外服务器。 Env precondition:Win 7+, VS2015u3, Win10.0.14393 SDK, Ninja 1...._cefpython ffmpeg

Spring @Scheduled定时任务每次执行两次_@scheduled执行两次-程序员宅基地

文章浏览阅读4.2k次。我所遇到定时任务每次执行两次,是因为:1、在spring配置中定义了bean,例如:<bean id="dyGoodsMQListener" class="com.XX.union.open.push.goods.mq.DYGoodsMQListener"/>2、在对象中又加了注解:@Componentpublic class DYGoodsMQListener ..._@scheduled执行两次

图像缩放双线性插值算法_缩放比例越大 双线性插值越大吗-程序员宅基地

文章浏览阅读3w次。插值算法对于缩放比例较小的情况是完全可以接受的,令人信服的。一般的,缩小0.5倍以上或放大3.0倍以下,对任何图像都是可以接受的。最邻近插值(近邻取样法):  最临近插值的的思想很简单。对于通过反向变换得到的的一个浮点坐标,对其进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的像素值就是目的像素的像素值,也就是说,取浮点坐标最邻近的左上角点(对于DIB是右上角,因为它的扫描行是逆序存储的_缩放比例越大 双线性插值越大吗

随便推点

空格字符和空字符的区别_ascii码中的空格和空字符的区别-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏6次。在开发中看到需求上这样一条:报文头里面,允许输入空值的地方,要使用空格填充,即byte 0x20,不能使用byte 0x00。一开始完全不明白在说什么,经过查阅之后才明白过来:上述的0x20 和0x00指的是字符的ascii码16进制0x20, 十进制32:空格字符 指键盘上长长的那个键产生的字符而16进制0x00, 十进制0 :空字符 指字符串结尾系统自动_ascii码中的空格和空字符的区别

[1126]kerberos认证相关问题_keytab contains no suitable keys for lucanet@nyoco-程序员宅基地

文章浏览阅读2.6k次。文章目录HDP WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.securikinit: Keytab contains no suitable keys for [email protected] while getting initial credentials原因:可能导致问题:解决方案:测试验证:HDP WARN ipc.Client: Exception encount_keytab contains no suitable keys for [email protected] while getting init

php7 phpize,安装phpize7.3-程序员宅基地

文章浏览阅读646次。1,背景在现有的ubuntu16.04中,装了好几个版本的PHP/etc/php/5.6/ 7.0/ 7.1/ 7.2/ 7.3/whereis phpphp: /usr/bin/php7.3 /usr/bin/php7.0 /usr/bin/php /usr/lib/php /etc/php /usr/include/php/usr/share/php7.3-bcmath /usr/share/..._php7.3 phpize

Mycat高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)_服务不可用了以后,keepalived会告诉haproxy不再往上转发了吗-程序员宅基地

文章浏览阅读639次。转载请注明出处:http://blog.csdn.net/l1028386804/article/details/76397064本文是在博文《Mycat之——Mycat集群部署(基于HAProxy + Mycat)》的基础上,实现高可用负载均衡,若还没有阅读博文《Mycat之——Mycat集群部署(基于HAProxy + Mycat)》,请先阅读博文《Mycat之——Mycat集群部署(基于..._服务不可用了以后,keepalived会告诉haproxy不再往上转发了吗

Flex 跨域访问解决方案_"<cross-domain-policy> <allow-access-from domain=\-程序员宅基地

文章浏览阅读108次。想让swf 文件在一台服务器上运行并且能够访问另一台服务器上的资源,这时就会遇到跨域问题,请看下面的解决方案。 写一个名字为 crossdomain.xml 的XML文件,这个方法是允许任何Flash都可以调用,放到被调用文件的网站根目录下:view plaincopy to clipboardprint?&lt;?xml version="1.0"?&gt; &lt;!DOCTYPE..._"

Java异常执行顺序(9/5/2018)_java的异常抛出顺序-程序员宅基地

文章浏览阅读722次。public class ExceptionDemo { public static void main(String[] args) throws TestException { try { Test(); System.out.println("无论如何都不执行"); } catch (T..._java的异常抛出顺序

推荐文章

热门文章

相关标签