vim使用技巧

在一般情况下,无论何种 Linux 发行版本都是包括 Vim 的,并且在默认会安装它。所以用好vim编辑器,方便我们在各种Linux操作系统下进行文本编辑,代码书写。
Vim 是一个模式编辑器,也就是 vim 会根据所处的模式对不同行为作出不同反应。

  • vim在一般模式 会在屏幕的底部显示文件名或者是空白;
  • 输入模式,底部会显示 –INSERT–;
  • 可视模式,底部显示的是–VISUAL–。在打开 vim 时默认处于一般模式。

基本操作

  1. 输入
    要输入文字,你要让编辑器进入输入模式。按下 i 键,接着你会发现屏幕左下方的文字变成了 –INSERT–(意味着编辑器进入了输入模式)。
    输入完,按下 Esc 键,–INSER–消失了,编辑器又回到了命令模式。
  2. 移动
    在一般模式中,你可以使用 h(左)、j(下)、k(上)和 l(右) 在 vim 里移动。咋看起来写 vim 的人随意地选取了这些字母,不过这个做法有它很好的理由:移动是编辑器里最常做的事情,而这些键都在你右手放在键盘上时手指正对的那一行。换句话说,它们就在你最方便按的地方。
    1
    注意:
  • 也可以通过方向键来移动。只不过这样做反而会大大地地降低编辑文件的速度。因为按下方向键的时候必然要把手从字母键上移动到方向键上。如果一个小时内要重复这个动作成百上千遍的话,使用这四个键会节约数量可观的时间。因此,如果想高效地编辑的话,还是使用 h、j、k 和 l 吧。
  • 同时,也有些主机上的键盘是没有方向键或者不按常规方式排列方向键的。所以,知道如何使用这四个键也能在遇到上述情况下对你编辑文件有所帮助。
  1. 删除
    删除的方法是将光标移到想删除的文字上面然后按下 x
    删除一整行内容使用 “dd” 命令。删除后下面的行会移上来填补空缺。
    可以通过 “J” (即Shift + j)命令来删除换行符。
  2. 撤销和重复
    假如你删除过头了,当然你可以再输入一次的。不过会有更简单的方法。命令 u 会撤销你最后一次的编辑。
    如果你撤销过头了,可以按下 Ctrl + r (重复)来取消撤销过多带来的效果.
  3. 保存退出
    可以使用 “:wq” 命令来退出 vim。这个命令会将修改的文件写回硬盘然后退出。如果你输入了“:wq”,你的修改会被提交而且不可以进行撤销和重复操作,然后退出 vim。这个命令有三个部分:
    1.冒号 (:),它会让编辑器进入命令模式;
    2.命令 w,它告诉编辑器保存文件;
    3.命令 q,它告诉编辑器退出程序。
    某些时候,你可能会在你改了一大堆东西后,突然意识到你就不应该修改这个文件。不用担心,vim 有一个“退出然后放弃所有修改”的命令。它就是 “:q!”。这个命令同样有三个部分:
    1.冒号 (:),它会让编辑器进入命令模式;
    2.命令 q,它告诉编辑器退出程序;
    3.然后是强制命令修饰符——感叹号 (!)。感叹号是必须的,它告诉 vim 无需保存文件。

进阶操作

  1. 设置行号
    用“:set nu”命令来设置行号,设置后应如下所示,可以用“:set nonu”来取消行号设置。
    1
  2. 移动
    1
  3. 查找替换
    2
  4. 复制粘贴
    1
    2
  5. 删除
    1
  6. 撤销和重复
    1
  7. 打开、保存、退出
    1
    2
  8. 同时编辑多个文件
    1
  9. 可视模式
    1
  10. 环境设置
    1
  11. 暂时存档文件和恢复
    当编辑一个文件时,在这个文件所处的目录底下就会有一个临时文件,文件名为“编辑的文件名.swp”这是一个隐藏文件, 所有修改都会暂时存在这个文件中。在编辑过程中,系统或者 vi 非正常关闭了,那么再重新用 vi 打开这个文件时时,系统就会询问要回复『Recovery』。按下 R ,就可以将数据回复到修改过程的样子,再将 swp 文件删除。

注意:Vim 用户常见的一个问题就是被编辑器的模式所困扰。这常常是因为不清楚编辑器处在哪个模式,又或者不知道按下了哪个键导致编辑器进入了另外一个模式引起的。事实上,无论编辑器当前在什么模式,按下 Esc键,它都会回到一般模式。有时需要按两次 Esc,如果Vim 以一声蜂鸣回答你,那说明你已经是在一般模式了

最后附上自己的vim配置,在~/.vimrc文件(没有则创建该文件)中加入以下内容:

set nocompatible " 非兼容模式
filetype on " 自动识别文件格式
filetype indent on " 依据文本类型进行缩进
filetype plugin on
filetype plugin indent on

let mapleader=" "
" let &t_SI = "\<Esc>]50;CursorShape=1\x7"
" let &t_SR = "\<Esc>]50;CursorShape=2\x7"
" let &t_EI = "\<Esc>]50;CursorShape=0\x7"

" this vim, the base editor! Directer
noremap K 5kzz
noremap J 5jzz
noremap <C-D> 5<C-E>
noremap <C-U> 5<C-Y>
noremap n nzz "zz可以让当前行居中
noremap N Nzz
noremap * *zz
noremap # #zz
" Ctrl + c 替换"
noremap <C-c> yiw:%s/<C-r>0//g<Left><Left>
noremap <C-\> ^x<Down> " Ctrl+\进行去注释
noremap \ I#<ESC><Down> " \对改行加注释
map <C-f> #* "让Ctrl+f变成查找当前单词
noremap <ESC> :nohlsearch<CR><ESC> " 按ESC清除高亮的搜索结果
noremap <esc>^[ <esc>^[
noremap W :inoremap ( ()<><Left>Left<CR>:inoremap [ []<><Left>Left<CR>:inoremap { {}<><Left>Left<CR>:inoremap ' ''<><Left>Left<CR>:inoremap " ""<><Left>Left<CR>:inoremap < <><><Left>Left<CR>:set relativenumber<CR>:set number<CR>:set autoindent<CR>:set smartindent<CR> " Ctrl+W启动输入成对括号
noremap E :inoremap ( (<CR>:inoremap [ [<CR>:inoremap { {<CR>:inoremap ' '<CR>:inoremap " "<CR>:inoremap < <<CR>:set norelativenumber<CR>:set nonumber<CR>:set noautoindent<CR>:set nosmartindent<CR> " Ctrl+E关闭成对括号
inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>
inoremap ' ''<Left>
inoremap " ""<Left>
inoremap < <><Left>

map s :w<CR>
map Q :q<CR>
map S :wq<CR>
map <leader>sc :set spell!<CR>
noremap <C-x> ea<C-x>s
inoremap <C-x> <Esc>ea<C-x>s
inoremap <C-a> <Esc>A
inoremap <C-i> <Esc>I

syntax on " 语法高亮
colorscheme desert " 设置主题颜色
set encoding=utf-8
"set list
set number " 显示行号
set relativenumber " 显示相对行号
" set cursorline " 当前行显示下划线
set wrap " 当这一行太长的时候,就自动换行显示
set wildmenu " 命令栏输入指令的时候,按tab键出来候选项
set ignorecase " 搜索的时候忽略大小写
set smartcase " 全为小写的时候忽略大小写,有大写的时候还是要求大小写的
set showcmd
set hlsearch " 高亮搜索词
set incsearch " 在输入的时候就高亮搜索结果了
set autoindent " 自动缩进,和上一行保持一致
set smartindent " 会依据文件语法只能缩进
set showmatch " 显示括号匹配
set fdm=syntax " 依据语法自动折叠
set expandtab " 将tab键用空格代替
set tabstop=4 " 让tab等于4个空格
set softtabstop=4
set shiftwidth=4 " 让缩进变为4个空格
set backspace=2
set scrolloff=5
" 安装插件
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'itchyny/vim-cursorword'
call plug#end()

" airline"
" tu打开新的tab
map tu :tabe<CR>:e 
" tn下一个tab
map tn :+tabnext<CR>
" tp上一个tab
map tp :-tabnext<CR>
set laststatus=2  "永远显示状态栏
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 0
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2
let g:airline_powerline_fonts = 1  " 支持 powerline 字体
let g:airline#extensions#tabline#enabled = 1 " 显示窗口tab和buffer

if !exists('g:airline_symbols')
    let g:airline_symbols = {}
endif
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.branch = '⎇'

let g:airline#extensions#tabline#buffer_idx_mode = 1
nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9
nmap <leader>0 <Plug>AirlineSelectTab0
nmap <leader>- <Plug>AirlineSelectPrevTab
nmap <leader>+ <Plug>AirlineSelectNextTab
if has("autocmd")
    " 当进入Vim时,将光标位置设置为先前关闭文件时的位置。
    autocmd BufReadPost *
        \ if line("'\"") > 0 && line("'\"") <= line("$") |
        \   exe "normal! g`\"" |
        \ endif
endif
Logo

更多推荐