1-2. 设置vim为默认编辑器

[root@oldboy scripts]# echo 'alias vi=vim' >> /etc/bashrc
[root@oldboy scripts]# tail -1 /etc/bashrc
alias vi=vim
[root@oldboy scripts]# source /etc/bashrc

经过上述调整后,当用vi命令时,会自动被vim替换。

1-3. 配置.vimrc的重要参数

Linux环境下的vim编辑器默认功能不够强大,如果要进行Shell脚本的开发,还需要进行适当的设置,从而达到高效开发的目的。vim编辑器有一个可以用来调整配置的配置文件,默认放置在用户家目录下,全路径及名字组合为:~/.vimrc(全局路径为/etc/vimrc),这是一个隐藏文件。

~/.vimrc配置内容如下:

cat > ~/.vimrc << eof
" ~/.vimrc
" vim config file
" date 2018-07-15
" Created by oldboy
" blog:http://www.cnblogs.com/wushuaishuai
"""""""""""""""""""""
" => 全局配置
"""""""""""""""""""""
"关闭兼容模式
set nocompatible
"设置历史记录步数
set history=100
"开启相关插件
filetype on
filetype plugin on
filetype indent on
"当文件在外部被修改时,自动更新该文件
set autoread
"激活鼠标的使用
set mouse=a
"""""""""""""""""""""
" => 字体和颜色
"""""""""""""""""""""
"开启语法
syntax enable
"设置字体
"set guifont=dejaVu\ Sans\ MONO\ 10
""设置配色
"colorscheme desert
"高亮显示当前行
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00
"""""""""""""""""""""
" => 代码折叠功能 by oldboy
"""""""""""""""""""""
"激活折叠功能
set foldenable
"设置按照语法方式折叠(可简写set fdm=XX)
"有6种折叠方法:
"manual 手工定义折叠
"indent 更多的缩进表示更高级别的折叠
"expr   用表达式来定义折叠
"syntax 用语法高亮来定义折叠
"diff   对没有更改的文本进行折叠
"marker 对文中的标志进行折叠
set foldmethod=manual
"设置折叠区域的宽度
"如果不为0,则在屏幕左侧显示一个折叠标识列
"分别用“-”和“+”来表示打开和关闭的折叠。
set foldcolumn=0
"设置折叠层数为3
setlocal foldlevel=3
"设置为自动关闭折叠
set foldclose=all
"用空格键来代替zo和zc快捷键实现开关折叠
"zo  O-pen a fold   (打开折叠)
"zc  C-lose a fold  (关闭折叠)
"zf  F-old creation (创建折叠)
nnoremap <space> @=((foldclosed(line('.')) < 0)  'zc' : 'zo')<CR>
"""""""""""""""""""""
" => 文字处理 by oldboy
"""""""""""""""""""""
"使用空格来替换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 si
"自动换行
set wrap
"设置软宽度
set sw=4
"""""""""""""""""""""
" => Vim 界面 by oldboy
"""""""""""""""""""""
"Turn on WiLd menu
set wildmenu
"显示标尺
set ruler
"设置命令行的高度
set cmdheight=1
"显示行数
"set nu
"Do not redraw, when running macros.. lazyredraw
set lz
"设置退格
set backspace=eol,start,indent
"Bbackspace and cursor keys wrap to
set whichwrap+=<,>,h,l
"Set magic on(设置魔术)
set magic
"关闭遇到错误时的声音提示
"关闭错误信息响铃
set noerrorbells
"关闭使用可视响铃代替呼叫
set novisualbell
"显示匹配的括号([{和}])
set showmatch
"How many tenths of a second to blink
set mat=2
"搜索时高亮显示搜索到的内容
set hlsearch
"搜索时不区分大小写
"还可以使用简写(“:set ic” 和 “:set noic”)
set ignorecase
"""""""""""""""""""""
" => 编码设置
"""""""""""""""""""""
"设置编码
set encoding=utf-8
"设置文件编码
set fileencodings=utf-8
"设置终端编码
set termencoding=utf-8
"""""""""""""""""""""
" => 其他设置 by oldboy 2010
"""""""""""""""""""""
"开启新行时使用智能自动缩进
set smartindent
set cin
set showmatch
"隐藏工具栏
set guioptions-=T
"隐藏菜单栏
set guioptions-=m
"置空错误铃声的终端代码
set vb t_vb=
"显示状态栏 (默认值为 1, 表示无法显示状态栏)
set laststatus=2
"粘贴不换行问题的解决方法
set pastetoggle=<F9>
"设置背景色
set background=dark
"设置高亮相关
highlight Search ctermbg=black  ctermfg=white guifg=white guibg=black
"在Shell脚本的开头自动增加解释器及作者等版权信息
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
   if expand("%:e") == 'sh'
    call setline(1, "#!/bin/bash")
    call setline(2, "# Author: Wu ShuaiShuai")
    call setline(3, "# Blog2: http://www.cnblogs.com/wushuaishuai")
    call setline(4, "# Time: ".strftime("%F %T"))
    call setline(5, "# Name: ".expand("%"))
    call setline(6, "# Version: v1.0")
    call setline(7, "# Description: This is a Script.")
   endif
endfunc

退出重新登录后.vimrc生效,同样适用于普通用户。

在代码量较大时比较有用的高级功能——代码折叠(依赖.vimrc配置,当然也可以以命令模式执行)

  • 在命令模式下,可以把光标定位到当前的第2行,然后执行zf3j命令,便可将第2行及其下的3行缩进,其他缩进也是如此。
  • 若把光标放到对应折叠后的行上,按空格键即可展开上述折叠的行。
  • 2-7-2. 列块(可视)模式

    Ctrl+v,启用列块模式,之后移动鼠标,可以选中某一个矩形块,对于有规律的表格可以用这个功能。
    目前当前光标所在的位置是右下角,可以在这个块的四角进行移动光标,方法就是按o(小写),O(大写)来切换四个顶点。

    (1).删除或剪切操作

  • Ctrl+v,进入列块模式,选中需要删除的内容
  • 按d(小写)即可删除选中区域
  • 按D(大写)删除选中区域及所在行后面的数据
  • (2).输入操作

  • Ctrl+v,进入列块模式,选中需要添加的内容
  • 按I(大写)进入插入,然后输入“//”(你想输入的字符)
  • 然后按ESC即可在其它行输入你想输入的字符了
  • (3).复制和粘贴操作

  • Ctrl+v,进入列块模式,选中需要复制的内容
  • 按y(小写)复制内容,4 line yanked 说明复制了四行
  • 然后移动光标到行首,按p(小写)在光标的后面一列输入内容,按P(大写)在光标前面一列输入内容
  • 2-8-2. 关闭多窗口

    可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。
    :tabc 关闭当前窗口
    :tabo 关闭所有窗口
    :ctrl+w - 纵向缩小 (行数减少)
    :res(ize) num  例如::res 5,显示行数调整为5行
    :res(ize)+num 把当前窗口高度增加num行
    :res(ize)-num 把当前窗口高度减少num行
    
    :vertical res(ize) num 指定当前窗口为num列
    :vertical res(ize)+num 把当前窗口增加num列
    :vertical res(ize)-num 把当前窗口减少num列
    
    :Ex 开启目录浏览器(可以浏览当前目录下的所有文件,并且可以选择)
    :Vex 垂直分割窗当前窗口,并在一个窗口中开启目录浏览器
    :Sex 水平分割当前窗口,并在一个窗口中开启目录浏览器
    :ls 显示当前buffer情况