vim的使用与相关配置

vim在普通模式下的快捷键

注意vim,也可以说任何光标是基于字符的编辑器,当光标指向某个字符时,写入时其实是在其字符的前面开始写入的

zz: 将当前行置于屏幕中间(不是转载…)
zt: 将当前行置于屏幕顶端(不是猪头~)
zb:底端啦~

shift+a也就是A 在本行尾写入并进入写入模式

shift+i / I 在本行首写入并进入写入模式

o / O 在本行的下行新建一行并进入写入模式 / 在本行的上行新建一行并进入写入模式

w:把光标移动到下一个单词

<operation> <motion> 操作+动作,强大的功能!!!

  • 删除操作d

    • d + →:删除当前光标向右的第一个字符,删除左字符同理
    • d + {数字,不如3} + →:删除当前光标所在位置向右的三个字符,左同理
    • dd:删除整行(其实不是删除,是剪切操作,可通过p粘贴)
  • 复制操作y

    • y + →:复制当前光标向右的第一个字符,向左复制字符同理
    • y + {数字,不如3} + →:复制当前光标所在位置向右的三个字符,左同理
    • yy:复制整行(其实不是删除,是剪切操作,可通过p粘贴)
  • 删除更改操作c

    • c + 6 + →:删除当前光标向右的6个字符并进入写入模式

    • c + w:直接删除光标所在的单词(但此时光标应在单词的第一个字符),并进入写入模式进行更改

    • c + i + w:直接删除光标所在的单词(光标在单词的任意一个字符都可以),并进入写入模式进行更改

    • c + i + “/’:删除“ ”/‘ ’内的所有内容并进入写入模式

      i 操作其实有可多,除了上面的和操作的配合,还有

      • y + i + w/'/":复制整个单词或引号里的内容
      • d + i + w/'/":删除整个单词或引号里的内容
  • 将光标移动到某个字符

    • f + 某个字符:比如f+v vim就会找到这一行中的字符v并把光标移动到字符v
    • d + f + 某个字符:删除(剪切)光标到字符之间的内容
    • y + f + 某个字符:复制光标到字符之间的内容
    • c + f + 某个字符:删除光标到字符之间的内容,并进入写入模式进行更改

可视块:

  • v:小写v,按一下后就可以通过移动光标选中按v之前光标所在位置到移动光标之后的位置之间的内容
  • V:大写Vshift+v选中当前行,并可以通过上下选中其他行

分屏:

  • :split+回车:实现上下分屏
  • :vsplit+回车:实现左右分屏
  • :e 文件路径:打开一个新的文件
  • ctrl+w+h/j/k/l:实现光标的在不同窗口的移动
map sh :set splitright<CR>:vsplit<CR>	# 向右分屏并把光标移动到右边
map sl :set nosplitright<CR>:vsplit<CR>	# 向右分屏并把光标移动到左边
map sj :set splitbelow<CR>:split<CR>	# 向下分屏并把光标移动到下边
map sk :set nosplitbelow<CR>:split<CR>	# 向下分屏并把光标移动到上边

map <LEADER>h <C-w>h	" 空格+h 实现光标的向左的移动
map <LEADER>l <C-w>l	" 空格+l 实现光标的向右的移动
map <LEADER>j <C-w>j	" 空格+j 实现光标的向下的移动
map <LEADER>k <C-w>k	" 空格+k 实现光标的向上的移动

map <up> :res +5<CR>		# ↑ ↓ 实现上下分屏的大小
map <down> :res -5<CR>		# 
map <left> :vertical resize-5<CR>	# ← → 实现左右分屏的大小
map <right> :vertical resize+5<CR>	# 

文件格式转换:

  • :%TOhtml:把当前文件转为html%当前文件的意思

拼写检查:

  • :set spell:打开拼写检查
  • :set nospell:关闭拼写检查
  • 可以通过[ ]查看上一个或者下一个拼写错误
  • z=:假如有个词错了,把光标放在词的位置,按z=他就会出现一堆选项让你选,回车确定就好(命令模式下)
  • 还有一个在插入模式下的单词补充。。。。。。

小玩意

  • figlet

    figlet 字符
    # 他会生成字符的用符号拼凑的那种格式,想知道效果自己github吧,我对着不感兴趣
    

vim配置

配置文件的创建

具体在哪里创建vim的配置文件,我现在还不了解,目前知道俩个位置

  1. 在当前文件的目录下创建vimrc文件,在里面进行编辑配置
  2. 在当前用户的“家”下创建.vim目录,在.vim目录下创建vimrc文件并进行配置

一些配置

let mapleader=" "	# 将空格键替换Win键,<LEADER>对应Win键 配置的时候最好把它放在最上面

color elflord	# 更换vim主题

noremap a b		# 用a键替换b键,也就是vim会认为a就是b
map Q :q<CR>	# 普通模式下用大写Q代替“冒号 q 回车”
map s <nop>		# <nop>表示不进行任何操作
map R :source $MYVIMRC<CR>		# 刷新文档,这样就不用保存退出来实现配置文件的生效

syntax on		# 打开语法高亮
set number		# 显示行号
set relativenumber		# 这样就会显示当前行相对于整个文档的行号(标准行号),本行上下的内容显示相对于本行的位置,比如其下面第二行会显示2,上面第一行会显示1,适用于教学
set norelativenumber
set cursorline			# 在本行显示一条下标线
set wrap			# 不会使文本超出当前窗口的宽度,自动调整文本宽度
set showcmd			# 这样就会在下面显示你敲了什么键
set wildmenu		# 命令补全

set hlsearch		# 高亮查找的内容
exec "nohlsearch"		 # 解决打开一个新文件还在高亮之前的搜索内容的问题
set incsearch		# 边输入查找内容边高亮
set ignorecase		# 忽略搜索的大小写
set smartcase		# 智能搜索大小写
noremap <LEADER><CR> :nohlsearch<CR>	# 空格+回车 实现取消查找高亮

set scrolloff=5	# 使用显示屏幕下面的5行

vim插件的安装

Plug插件管理工具

https://github.com/junegunn/vim-plug	# Plug github地址

# Plug linux安装
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

call plug#begin('~/.vim/plugged') # 扩号里是你的配置文件地址

Plug '插件github地址'

call plug#end()

:PlugInstall		# 安装插件
:PlugUpdate			# 更新插件
:PlugClean			# 删除插件
:PlugUpgrade		# 升级 Vim-plug

# 审查插件
有时,更新的插件可能有新的 bug 或无法正常工作。要解决这个问题,你可以简单地回滚有问题的插件。输入 :PlugDiff 命令,然后按回车键查看上次 :PlugUpdate的更改,并在每个段落上按 X将每个插件回滚到更新前的前一个状态。



我的vim配置

" 下面五行是为了让vim更好的额适配插件
set nocompatible
filetype on
filetype indent on
filetype plugin on
filetype plugin indent on

set encoding=utf-8


" 将空格键替换Win键,<LEADER>对应Win键 配置的时候最好把它放在最上面
let mapleader=" "	

" 更换vim主题
color elflord

" 刷新文档,这样就不用保存退出来实现配置文件的生效
map R :source $MYVIMRC<CR>

" 打开语法高亮
syntax on
" 显示行号
set number
" 这样就会显示当前行相对于整个文档的行号(标准行号),本行上下的内容显示相对于本行的位置,比如其下面第二行会显示2,上面第一行会显示1,适用于教学	
set relativenumber	
" set norelativenumber
" 在本行显示一条下标线
set cursorline
" 不会使文本超出当前窗口的宽度,自动调整文本宽度	
set wrap
" 命令补全
set wildmenu
" 始终显示屏幕下面的n行
set scrolloff=10

" 高亮查找的内容
set hlsearch
" 解决打开一个新文件还在高亮之前的搜索内容的问题
" exec "nohlsearch"
" 边输入查找内容边高亮
set incsearch
" 忽略搜索的大小写	
set ignorecase
" 智能搜索大小写	
set smartcase
" 空格+回车 实现取消查找高亮
noremap <LEADER><CR> :nohlsearch<CR>


" 空格+h 实现光标的向左的移动
map <LEADER>h <C-w>h
" 空格+l 实现光标的向右的移动	
map <LEADER>l <C-w>l
" 空格+j 实现光标的向下的移动	
map <LEADER>j <C-w>j	
" 空格+k 实现光标的向上的移动
map <LEADER>k <C-w>k


call plug#begin('~/.vim/plugged')

Plug 'vim-airline/vim-airline'
Plug 'preservim/nerdtree'
" Plug 'ycm-core/YouCompleteMe'


call plug#end()

map tt :NERDTree<CR>

下面的配置来自zheli !

colorscheme blackboard       " 着色模式:蓝色背景
set guifont=Monaco:h10       " 字体 && 字号
"set guifont=Courier_New:h12 " 字体 && 字号
set tabstop=4                " 设置tab键的宽度
set shiftwidth=4             " 换行时行间交错使用4个空格
set autoindent               " 自动对齐
set backspace=2              " 设置退格键可用
set cindent shiftwidth=4     " 自动缩进4空格
set smartindent              " 智能自动缩进
set ai!                      " 设置自动缩进
set nu!                      " 显示行号
"set showmatch               " 显示括号配对情况
set mouse=a                  " 启用鼠标
set ruler                    " 右下角显示光标位置的状态行
set incsearch                " 开启实时搜索功能
set hlsearch                 " 开启高亮显示结果
set nowrapscan               " 搜索到文件两端时不重新搜索
set nocompatible             " 关闭兼容模式
set vb t_vb=                 " 关闭提示音
set cursorline               " 突出显示当前行
set hidden                   " 允许在有未保存的修改时切换缓冲区
set list                     " 显示Tab符,使用一高亮竖线代替
set listchars=tab:\|\ ,

syntax enable                " 打开语法高亮
syntax on                    " 开启文件类型侦测
filetype indent on           " 针对不同的文件类型采用不同的缩进格式
filetype plugin on           " 针对不同的文件类型加载对应的插件
filetype plugin indent on    " 启用自动补全


if has("gui_running")
    au GUIEnter * simalt ~x  " 窗口启动时自动最大化
    "winpos 20 20            " 指定窗口出现的位置,坐标原点在屏幕左上角
    "set lines=20 columns=90 " 指定窗口大小,lines为高度,columns为宽度
    "set guioptions-=m       " 隐藏菜单栏
    "set guioptions-=T       " 隐藏工具栏
    "set guioptions-=L       " 隐藏左侧滚动条
    "set guioptions-=r       " 隐藏右侧滚动条
    "set guioptions-=b       " 隐藏底部滚动条
    "set showtabline=0       " 隐藏Tab栏
endif

set writebackup              " 设置无备份文件
set nobackup
set autochdir                " 设定文件浏览器目录为当前目录
"set nowrap                  " 设置不自动换行
set foldmethod=syntax        " 选择代码折叠类型
set foldlevel=100            " 禁止自动折叠

set laststatus=2             " 开启状态栏信息
set cmdheight=2              " 命令行的高度,默认为1,这里设为2

" 每行超过80个的字符用下划线标示
au BufRead,BufNewFile *.s,*.h,*.c,*.cpp,*.cc,*.java,*.erl,*.sh,*.vim,*.js,*.xml,*.html,*.xhtml 2match Underlined /.\%81v/


" 设置编码
set fenc=utf-8
set encoding=utf-8
set fileencodings=utf-8,gbk,cp936,latin-1
" 解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 解决consle输出乱码
language messages zh_CN.utf-8


" For Haskell
:let hs_highlight_delimiters=1            " 高亮定界符
:let hs_highlight_boolean=1               " 把TrueFalse识别为关键字
:let hs_highlight_types=1                 " 把基本类型的名字识别为关键字
:let hs_highlight_more_types=1            " 把更多常用类型识别为关键字
:let hs_highlight_debug=1                 " 高亮调试函数的名字
:let hs_allow_hash_operator=1             " 阻止把#高亮为错误


" ======= 引号 && 括号自动匹配 ======= "

:inoremap ( ()<ESC>i

:inoremap ) <c-r>=ClosePair(')')<CR>

:inoremap { {}<ESC>i

:inoremap } <c-r>=ClosePair('}')<CR>

:inoremap [ []<ESC>i

:inoremap ] <c-r>=ClosePair(']')<CR>

":inoremap < <><ESC>i

":inoremap > <c-r>=ClosePair('>')<CR>

:inoremap " ""<ESC>i

:inoremap ' ''<ESC>i

:inoremap ` ``<ESC>i

function ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
        return "\<Right>"
    else
        return a:char
    endif
endf


" MiniBufExplorer     多个文件切换 可使用鼠标双击相应文件名进行切换
let g:miniBufExplMapWindowNavVim=1
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1

" :Tlist              调用TagList
let Tlist_Show_One_File=1                    " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow=1                  " 如果Taglist窗口是最后一个窗口则退出Vim
let Tlist_Use_Right_Window=1                 " 在右侧窗口中显示
let Tlist_File_Fold_Auto_Close=1             " 自动折叠

" TxtBrowser          高亮TXT文本文件
au BufRead,BufNewFile *.txt setlocal ft=txt

下面的配置文件来自Up主TheCW

视频链接:

  1. 视频一
  2. 视频二
  3. 视频三

GitHub地址:这里!

他的配置我有的没有用,仅供参考

let mapleader=" "
syntax on
set number
set norelativenumber
set cursorline
set wrap
set showcmd
set wildmenu

set hlsearch
exec "nohlsearch"
set incsearch
set ignorecase
set smartcase


set nocompatible		# 下面五行是为了让vim更好的额适配插件
filetype on
filetype indent on
filetype plugin on
filetype plugin indent on
set mouse=a		# 可以使用鼠标,一般不使用 
set encoding=utf-8		# 编码格式
let &t_ut=''		# 解决终端颜色配置的一些问题
set expandtab		# 以下四行更改缩进的长度
set tabstop=2
set shiftwidth=2
set softtabstop=2
set list		# 显示空格
set listchars=tab:▸\ ,trail:set scrolloff=5
set tw=0
set indentexpr=
set backspace=indent,eol,start		# 退格键 实现光标移动到行尾
set foldmethod=indent		# 收代码
set foldlevel=99
let &t_SI = "\<Esc>]50;CursorShape=1\x7"	# 以下三行可以使vim的光标在普通模式和写入模式下有不同的光标样式
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
set laststatus=2
set autochdir	# 可以在当前文件下执行你要执行的命令
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif	# 让光标放在你上次编辑文件的位置

noremap = nzz		#
noremap - Nzz
noremap <LEADER><CR> :nohlsearch<CR>

noremap n h
noremap u k
noremap e j
noremap i l
noremap U 5k
noremap E 5j
noremap N 7h
noremap I 7l
" N key: go to the start of the line
noremap <C-n> 0
" I key: go to the end of the line
noremap <C-i> $

noremap k i
noremap K I
noremap l u

map s <nop>
map S :w<CR>
map Q :q<CR>
map R :source $MYVIMRC<CR>
map ; :

map si :set splitright<CR>:vsplit<CR>
map sn :set nosplitright<CR>:vsplit<CR>
map su :set nosplitbelow<CR>:split<CR>
map se :set splitbelow<CR>:split<CR>

map <LEADER>i <C-w>l
map <LEADER>u <C-w>k
map <LEADER>n <C-w>h
map <LEADER>e <C-w>j

map <up> :res +5<CR>
map <down> :res -5<CR>
map <left> :vertical resize-5<CR>
map <right> :vertical resize+5<CR>

map tu :tabe<CR>
map tn :-tabnext<CR>
map ti :+tabnext<CR>

map sv <C-w>t<C-w>H
map sh <C-w>t<C-w>K

call plug#begin('~/.vim/plugged')

Plug 'vim-airline/vim-airline'
Plug 'connorholyday/vim-snazzy'



" File navigation
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }	# 在vim窗口的左边显示文件树
Plug 'Xuyuanp/nerdtree-git-plugin'

" Taglist
Plug 'majutsushi/tagbar', { 'on': 'TagbarOpenAutoClose' }

" Error checking
Plug 'w0rp/ale'

" Auto Complete
Plug 'Valloric/YouCompleteMe'		# 代码补全
'''
还需要手动安装一下 才可以使用
cd ~/.vim/plugged/YoucompleteMe/
sudo python3 install.py
installing.....
'''
" Undo Tree
Plug 'mbbill/undotree/'		# 以树形的方式浏览文件的修改历史

" Other visual enhancement
Plug 'nathanaelkane/vim-indent-guides'
Plug 'itchyny/vim-cursorword'

" Git
Plug 'rhysd/conflict-marker.vim'
Plug 'tpope/vim-fugitive'
Plug 'mhinz/vim-signify'
Plug 'gisphm/vim-gitignore', { 'for': ['gitignore', 'vim-plug'] }

" HTML, CSS, JavaScript, PHP, JSON, etc.
Plug 'elzr/vim-json'
Plug 'hail2u/vim-css3-syntax'
Plug 'spf13/PIV', { 'for' :['php', 'vim-plug'] }
Plug 'gko/vim-coloresque', { 'for': ['vim-plug', 'php', 'html', 'javascript', 'css', 'less'] }
Plug 'pangloss/vim-javascript', { 'for' :['javascript', 'vim-plug'] }
Plug 'mattn/emmet-vim'

" Python
Plug 'vim-scripts/indentpython.vim'

" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }
Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
Plug 'vimwiki/vimwiki'

" Bookmarks
Plug 'kshenoy/vim-signature'

" Other useful utilities
Plug 'terryma/vim-multiple-cursors'
Plug 'junegunn/goyo.vim' " distraction free writing mode
Plug 'tpope/vim-surround' " type ysks' to wrap the word with '' or type cs'` to change 'word' to `word`
Plug 'godlygeek/tabular' " type ;Tabularize /= to align the =
Plug 'gcmt/wildfire.vim' " in Visual mode, type i' to select all text in '', or type i) i] i} ip
Plug 'scrooloose/nerdcommenter' " in <space>cc to comment a line

" Dependencies
Plug 'MarcWeber/vim-addon-mw-utils'
Plug 'kana/vim-textobj-user'
Plug 'fadein/vim-FIGlet'


call plug#end()

let g:SnazzyTransparent = 1
color snazzy

" ===
" === NERDTree
" ===
map tt :NERDTreeToggle<CR>		# 文件树的一些配置
let NERDTreeMapOpenExpl = ""
let NERDTreeMapUpdir = ""
let NERDTreeMapUpdirKeepOpen = "l"
let NERDTreeMapOpenSplit = ""
let NERDTreeOpenVSplit = ""
let NERDTreeMapActivateNode = "i"
let NERDTreeMapOpenInTab = "o"
let NERDTreeMapPreview = ""
let NERDTreeMapCloseDir = "n"
let NERDTreeMapChangeRoot = "y"


" ==
" == NERDTree-git
" ==
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ "Unknown"   : "?"
    \ }


" ===
" === You Complete ME
" ===
nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap g/ :YcmCompleter GetDoc<CR>
nnoremap gt :YcmCompleter GetType<CR>
nnoremap gr :YcmCompleter GoToReferences<CR>
let g:ycm_autoclose_preview_window_after_completion=0
let g:ycm_autoclose_preview_window_after_insertion=1
let g:ycm_use_clangd = 0
let g:ycm_python_interpreter_path = "/bin/python3"
let g:ycm_python_binary_path = "/bin/python3"


" ===
" === ale
" ===
let b:ale_linters = ['pylint']
let b:ale_fixers = ['autopep8', 'yapf']


" ===
" === Taglist
" ===
map <silent> T :TagbarOpenAutoClose<CR>


" ===
" === MarkdownPreview
" ===
let g:mkdp_auto_start = 0
let g:mkdp_auto_close = 1
let g:mkdp_refresh_slow = 0
let g:mkdp_command_for_global = 0
let g:mkdp_open_to_the_world = 0
let g:mkdp_open_ip = ''
let g:mkdp_browser = 'chromium'
let g:mkdp_echo_preview_url = 0
let g:mkdp_browserfunc = ''
let g:mkdp_preview_options = {
    \ 'mkit': {},
    \ 'katex': {},
    \ 'uml': {},
    \ 'maid': {},
    \ 'disable_sync_scroll': 0,
    \ 'sync_scroll_type': 'middle',
    \ 'hide_yaml_meta': 1
    \ }
let g:mkdp_markdown_css = ''
let g:mkdp_highlight_css = ''
let g:mkdp_port = ''
let g:mkdp_page_title = '「${name}」'


" ===
" === vim-table-mode
" ===
map <LEADER>tm :TableModeToggle<CR>

" ===
" === Python-syntax
" ===
let g:python_highlight_all = 1
" let g:python_slow_sync = 0


" ===
" === vim-indent-guide
" ===
let g:indent_guides_guide_size = 1
let g:indent_guides_start_level = 2
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_color_change_percent = 1
silent! unmap <LEADER>ig
autocmd WinEnter * silent! unmap <LEADER>ig


" ===
" === Goyo
" ===
map <LEADER>gy :Goyo<CR>


" ===
" === vim-signiture
" ===
let g:SignatureMap = {
        \ 'Leader'             :  "m",
        \ 'PlaceNextMark'      :  "m,",
        \ 'ToggleMarkAtLine'   :  "m.",
        \ 'PurgeMarksAtLine'   :  "dm-",
        \ 'DeleteMark'         :  "dm",
        \ 'PurgeMarks'         :  "dm/",
        \ 'PurgeMarkers'       :  "dm?",
        \ 'GotoNextLineAlpha'  :  "m<LEADER>",
        \ 'GotoPrevLineAlpha'  :  "",
        \ 'GotoNextSpotAlpha'  :  "m<LEADER>",
        \ 'GotoPrevSpotAlpha'  :  "",
        \ 'GotoNextLineByPos'  :  "",
        \ 'GotoPrevLineByPos'  :  "",
        \ 'GotoNextSpotByPos'  :  "mn",
        \ 'GotoPrevSpotByPos'  :  "mp",
        \ 'GotoNextMarker'     :  "",
        \ 'GotoPrevMarker'     :  "",
        \ 'GotoNextMarkerAny'  :  "",
        \ 'GotoPrevMarkerAny'  :  "",
        \ 'ListLocalMarks'     :  "m/",
        \ 'ListLocalMarkers'   :  "m?"
        \ }


" ===
" === Undotree
" ===
let g:undotree_DiffAutoOpen = 0
map L :UndotreeToggle<CR>



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值