VIM工具使用

2024-06-09 19:53

Vim文本编辑器及其应用

Vim 是 Vi 的增强版

Vim及其安装

编辑器种类:Vim、emacs、pico、nano

Vim 的安装

#如果在命令行模式下输入“vim”,输出结果为“Command not found”,则表示此系统中未安装 Vim。
#CentOS 系统中,使用如下命令即可安装 Vim:
yum install vim

Linux Vim三种工作模式(命令模式、输入模式和编辑模式)

使用 Vim 编辑文件时,存在 3 种工作模式,分别是命令模式、输入模式和编辑模式,这 3 种工作模式可随意切换,如图 1 所示。

Vim的命令模式

使用 Vim 编辑文件时,默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。

Vim的输入模式

在输入模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。

使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。

表 3 各插入命令的具体功能

快捷键功能描述
i在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a在当前光标所在位置之后插入随后输入的文本
A在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令

Vim 的编辑模式

辑模式用于对文件中的指定内容执行保存、查找或替换等操作。

使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。

指令执行后 Vim 会自动返回命令模式。如想直接返回命令模式,按 Esc 即可。

Linux Vim基本操作(文件的打开和编辑)

Vim 打开文件

#Vim 打开文件
[root@itxdl ~]# vim /test/vi.test #
##打开文件时 Vim 处于命令模式,此时文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等,此时可以使用插入命令进入输入模式对文件进行编辑

表 2 Vim 打开文件的快捷方法

Vi 使用的选项说 明
vim filename打开或新建一个文件,并将光标置于第一行的首部
vim -r filename恢复上次 vim 打开时崩溃的文件
vim -R filename把指定的文件以只读方式放入 Vim 编辑器中
vim + filename打开文件,并将光标置于最后一行的首部
vi +n filename打开文件,并将光标置于第 n 行的首部
vi +/pattern filename打幵文件,并将光标置于第一个与 pattern 匹配的位置
vi -c command filename在对文件进行编辑前,先执行指定的命令

Vim 进行编辑

Vim 插入文本

从命令模式进入输入模式进行编辑,可以按下 I、i、O、o、A、a 等键来完成,使用不同的键,光标所处的位置不同,如表 3 所示。

功能描述 
i在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O(大写)在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a在当前光标所在位置之后插入随后输入的文本
A在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行 a 命令
Vim 查找文本
快捷键功能描述
/abc从光标所在位置向前查找字符串 abc
/^abc查找以 abc 为行首的行
/abc$查找以 abc 为行尾的行
?abc从光标所在为主向后查找字符串 abc
n向同一方向重复上次的查找指令
N向相反方向重复上次的查找指定

需要注意的是,要查找的字符串是严格区分大小写的

如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"

如果在字符串中出现特殊符号,则需要加上转义字符 ""。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 "10$",则需要在命令模式中输入 "/10$"

Vim 替换文本

表 7 Vim替换文本

快捷键功能描述
r替换光标所在位置的字符
R从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:s/a1/a2/g将当前光标所在行中的所有 a1 用 a2 替换
:n1,n2s/a1/a2/g将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
:g/a1/a2/g将文件中所有的 a1 都用 a2 替换
Vim删除文本

表 8 Vim 删除文本快捷键

快捷键功能描述
x删除光标所在位置的字符
dd删除光标所在行
ndd删除当前行(包括此行)后 n 行文本
dG删除光标所在行一直到文件末尾的所有内容
D删除光标位置到行尾的内容
:a1,a2d函数从 a1 行到 a2 行的文本内容

注意,被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 "p" 键,就可以将刚才删除的内容又粘贴到此处。

Vim复制和粘贴文本

表 9 Vim 复制文本

p将剪贴板中的内容粘贴到光标后
P(大写)将剪贴板中的内容粘贴到光标前
y复制已选中的文本到剪贴板
yy将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw将光标位置的单词复制到剪贴板
Vim其他常用快捷键

某些情况下,可能需要把两行进行连接。比如说,下面的文件中有两行文本,现在需要将其合并成一行(实际上就是将两行间的换行符去掉)。可以直接在命令模式中按下 "J" 键,按下前后如图 10 所示。

图 10 按下 "J" 键前

如果不小心误删除了文件内容,则可以通过 "u" 键来撤销刚才执行的命令。如果要撤销刚才的多次操作,可以多按几次 "u" 键。

Vim 保存退出文本

Vim 的保存和退出是在编辑模式中进行的,其常用命令如下表所示。

:wq保存并退出 Vim 编辑器
:wq!保存并强制退出 Vim 编辑器
:q不保存就退出 Vim 编辑器
:q!不保存,且强制退出 Vim 编辑器
:w保存但是不退出 Vim 编辑器
:w!强制保存文本
:w filename另存到 filename 文件
x!保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令
ZZ直接退出 Vim 编辑器

需要注意的是,"w!" 和 "wq!" 等类似的指令,通常用于对文件没有写权限的时候(显示 readonly,如图 12 所示),但如果你是文件的所有者或者 root 用户,就可以强制执行。

Vim移动光标快捷键汇总

Vim快捷方向键

表 1 Vim光标上、下、左、右移动快捷键。

快捷键功能描述
h光标向左移动一位
j光标向下移动一行(以回车为换行符),也就是光标向下移动
k光标向上移动一行(也就是向上移动)
l光标向右移动一位

Vim光标以单词为单位移动

快捷键功能描述
w 或 W光标移动至下一个单词的单词首
b 或 B光标移动至上一个单词的单词首
e 或 E光标移动至下一个单词的单词尾
nw 或 nWn 为数字,表示光标向右移动 n 个单词
nb 或 nBn 为数字,表示光标向左移动 n 个单词

Vim光标移动至行首或行尾

表 3 光标移动到行首或行尾。

快捷键功能描述
0 或 ^光标移动至当前行的行首
$光标移动至当前行的行尾
n$光标移动至当前行只有 n 行的行尾,n为数字

Vim光标移动至指定字符

表 4 光标移动至指定字符

快捷键功能描述
fx光标移动至当前行中下一个 x 字符处
Fx光标移动至当前行中下一个 x 字符处

Vim光标移动到指定行

表 5 光标移动到指定行

快捷键功能描述
gg光标移动到文件开头
G光标移动至文件末尾
nG光标移动到第 n 行,n 为数字
:n编辑模式下使用的快捷键,可以将光标快速定义到指定行的行首

Vim光标移动到匹配的括号处

。Vim 里面提供了一个非常方便地査找匹配括号的命令,这就是 "%"。

Linux Vim撤销和恢复撤销快捷键用法详解

使用 Vim 编辑文件内容时,经常会有如下 2 种需求:

  • 对文件内容做了修改之后,却发现整个修改过程是错误或者没有必要的,想将文件恢复到修改之前的样子。

  • 将文件内容恢复之后,经过仔细考虑,又感觉还是刚才修改过的内容更好,想撤销之前做的恢复操作。

基于这 2 种需求,Vim 编辑器提供了撤销和恢复撤销的命令,如表 1 所示。

表 1 Linux Vim 撤销和恢复撤销快捷键。

快捷键功能
u(小写)undo 的第 1 个字母,功能是撤销最近一次对文本做的修改操作。
Ctrl+RRedo 的第 1 个字母,功能是恢复最近一次所做的撤销操作。
U(大写)第一次会撤销对一行文本(光标所在行)做过的全部操作,第二次使用该命令会恢复对该行文本做过的所有操作。

注意,以上这 3 种命令都必须在 Vim 编辑器处于命令模式时才能使用。

Linux Vim可视化模式及其用法

在 Vim 中,如果想选中目标文本,就需要调整 Vim 进入可视化模式,如表 1 所示,通过在 Vim 命令模式下键入不同的键,可以进入不同的可视化模式。

 

命令功能
v(小写)又称字符可视化模式,此模式下目标文本的选择是以字符为单位的,也就是说,该模式下要一个字符一个字符的选中要操作的文本。
V(大写)又称行可视化模式,此模式化目标文本的选择是以行为单位的,也就是说,该模式化可以一行一行的选中要操作的文本。
Ctrl+v(组合键)又称块可视化模式,该模式下可以选中文本中的一个矩形区域作为目标文本,以按下 Ctrl+v 位置作为矩形的一角,光标移动的终点位置作为它的对角。

表 3 可视化模式支持使用的命令

命令功能
d删除选中的部分文本。
D删除选中部分所在的行,和 d 不同之处在于,即使选中文本中有些字符所在的行没有都选中,删除时也会一并删除。
y将选中部分复制到剪贴板中。
p(小写)将剪贴板中的内容粘贴到光标之后。
P(大写)将剪贴板中的内容粘贴到光标之前。
u(小写)将选中部分中的大写字符全部改为小写字符。
U(大写)将选中部分中的小写字符全部改为大写字符。
>将选中部分右移(缩进)一个 tab 键规定的长度(CentOS 6.x 中,一个tab键默认相当于 8 个空白字符的长度)。
<将选中部分左移一个 tab 键规定的长度(CentOS 6.x 中,一个tab键默认相当于 8 个空白字符的长度)。

Linux Vim批量注释和自定义注释快捷键

连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 ":起始行,终止行 s/^/#/g",例如:

#表示在第 1~10 行行首加"#"注释。"^"意为行首;"g"表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将 "g" 改为 "c"。
#意为将行首的"#"替换为空,即删除。
:1,10s/^/#/g

#添加"//"注释要稍微麻烦一些,命令格式为 ":起始行,终止行 s/^/\/\//g"。例如:表示在第 1~5 行行首加"//"注释,因为 "/" 前面需要加转义字符 "\",所以写出来比较奇特。
:1,5s/^/\/\//g


#:map 快捷键 执行命令 定义快捷键 "Ctrl+P" 为在行首添加 "#" 注释,可以执行 ":map^P l#<Esc>"。其中 "^P" 为定义快捷键 "Ctrl+P"。注意:必须同时按 "Ctrl+V+P" 快捷键生成 "^P" 方可有效,或先按 "Ctrl+V" 再按 "Ctrl+P" 也可以,直接输入 "^P" 是无效的。

#"l#<Esc>" 就是此快捷键要触发的动作,"l" 为在光标所在行行首插入,"#" 为要输入的字符,"<Esc>" 表示退回命令模式。"<Esc>" 要逐个字符输入,不可直接按键盘上的 Esc 键。
#将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用

Vim显示行号

临时显示行号

如果只是临时显示vim的行号,只须按ESC键退出编辑内容模式,输入“:set number”后按回车键,就可以显示行号了。行号显示只是暂时的,退出vim后再次打开vim就不显示行号了。

永久显示行号

如果想让vim永久显示行号,则需要修改vim配置文件vimrc。如果没有此文件可以创建一个。在启动vim时,当前用户根目录下的vimrc文件会被自动读取,因此一般在当前用户的根目录下创建vimrc文件,即使用下面的命令: 这里写图片描述

在打开的vimrc文件中最后一行输入:set number ,然后保存退出。再次用vim打开文件时,就会显示行号了。

Vim配置文件(.vimrc)详解

Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim

Vim分类

  • 系统Vim配置文件/etc/vimrc

    所有系统用户在启动Vim时,都会加载这个配置文件。默认目录位于/etc/.vimrc

  • 用户Vim配置文件~/.vimrc

    当前用户在启动Vim时,会加载家目录下的配置文件。默认目录位于~/.vimrc

配置文件加载优先级~/.vimrc > /etc/vimrc

vim启动时,优先读取~/.vimrc配置文件,再去读取/etc/vimrc的配置文件

配置文件的环境参数

vimrc文件的一些比较重要的内容

基本设置

set nocompatible                        " 不兼容vi模式

set langmenu=en_US                      " 菜单语言 中文为 zh_CN

set fileencodings=utf-8,chinese,latin-1

set fileencoding=utf-8                  " 中文不乱码了,世界都好了

set number                              " 窗口左侧显示行号

set relativenumber                      " 配合number,更高效的行间跳转

au GUIEnter * simalt ~x                " vim 以最大化打开

set ignorecase                          " 查找时忽略大小写

set smartcase                          " 当输入中含有大写的时候会强制区分大小写

set incsearch                          " 输入进行中实时匹配查找到的字符串

set autoindent                          " 用来自动缩进

set smartindent                        " 自动判断缩进长度,一般适用于类C语言

set expandtab                          " 用一定的空格来代替tab

set tabstop=4                          " tab占4个空格

set softtabstop=4                      " 设置expandtab的情况下,输入backspace删除的空格

set shiftwidth=4                        "一般情况下tabstop=softtabstop=shiftwidth,这样不会乱

key-notation(键位标识)

key跟标识的对应关系,详情可见:help key-notation

yntax on "自动语法高亮
   "winpos 5 5         " 设定窗口位置  
   "set lines=40 columns=155   " 设定窗口大小  
   set nu              " 显示行号  
   set go=             " 不要图形按钮  
   "color asmanian2     " 设置背景主题  
   set guifont=Courier_New:h10:cANSI   " 设置字体  
   "syntax on           " 语法高亮  
  autocmd InsertLeave * se nocul  " 用浅色高亮当前行  
  autocmd InsertEnter * se cul    " 用浅色高亮当前行  
   set ruler           " 显示标尺  
   set showcmd         " 输入的命令显示出来,看的清楚些  
   "set cmdheight=1     " 命令行(在状态行下)的高度,设置为1  
   "set whichwrap+=<,>,h,l   " 允许backspace和光标键跨越行边界(不建议)  
   "set scrolloff=3     " 光标移动到buffer的顶部和底部时保持3行距离  
   set novisualbell    " 不要闪烁(不明白)  
   set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}   "状态行显示的内容  
   set laststatus=1    " 启动显示状态行(1),总是显示状态行(2)  
   set foldenable      " 允许折叠  
   set foldmethod=manual   " 手动折叠  
   "set background=dark "背景使用黑色
   set nocompatible  "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限  
   " 显示中文帮助
   if version >= 603
       set helplang=cn
       set encoding=utf-8
  endif
   " 设置配色方案
   "colorscheme murphy
   "字体
   "if (has("gui_running"))
   "   set guifont=Bitstream\ Vera\ Sans\ Mono\ 10
   "endif
   
   
   
   set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
   set termencoding=utf-8
   set encoding=utf-8
   set fileencodings=ucs-bom,utf-8,cp936
   set fileencoding=utf-8"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   """""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   "新建.c,.h,.sh,.java文件,自动插入文件头
  autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
   ""定义函数SetTitle,自动插入文件头
  func SetTitle()
       "如果文件类型为.sh文件
       if &filetype == 'sh'
          call setline(1,"\#########################################################################")
          call append(line("."), "\# File Name: ".expand("%"))
          call append(line(".")+1, "\# Author: zll")
          call append(line(".")+2, "\# mail: zhnlion@126.com")
          call append(line(".")+3, "\# Created Time: ".strftime("%c"))
          call append(line(".")+4, "\#########################################################################")
          call append(line(".")+5, "\#!/bin/bash")
          call append(line(".")+6, "")
       else
          call setline(1, "/*************************************************************************")
          call append(line("."), "   > File Name: ".expand("%"))
          call append(line(".")+1, "   > Author: zll")
          call append(line(".")+2, "   > Mail: zhnllion@126.com ")
          call append(line(".")+3, "   > Created Time: ".strftime("%c"))
          call append(line(".")+4, " ************************************************************************/")
          call append(line(".")+5, "")
      endif
       if &filetype == 'cpp'
          call append(line(".")+6, "#include")
          call append(line(".")+7, "using namespace std;")
          call append(line(".")+8, "")
      endif
       if &filetype == 'c'
          call append(line(".")+6, "#include")
          call append(line(".")+7, "")
      endif
       "新建文件后,自动定位到文件末尾
      autocmd BufNewFile * normal G
  endfunc
   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   "键盘命令
   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   
   
  nmap w :w!
  nmap f :find
   
   
   " 映射全选+复制 ctrl+a
  map ggVGY
  map! ggVGY
  map  gg=G
   " 选中状态下 Ctrl+c 复制
  vmap  "+y
   "去空行  
  nnoremap :g/^\s*$/d
   "比较文件  
  nnoremap :vert diffsplit
   "新建标签  
  map :tabnew  
   "列出当前目录文件  
  map :tabnew .  
   "打开树状文件目录  
  map \be  
   "C,C++ 按F5编译运行
  map :call CompileRunGcc()
  func! CompileRunGcc()
      exec "w"
       if &filetype == 'c'
          exec "!g++ % -o %<"
          exec "! ./%<"
      elseif &filetype == 'cpp'
          exec "!g++ % -o %<"
          exec "! ./%<"
      elseif &filetype == 'java'
          exec "!javac %"
          exec "!java %<"
      elseif &filetype == 'sh'
          :!./%
      endif
  endfunc
   "C,C++的调试
  map :call Rungdb()
  func! Rungdb()
      exec "w"
      exec "!g++ % -g -o %<"
      exec "!gdb ./%<"
  endfunc
   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   ""实用设置
   """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   " 设置当文件被改动时自动载入
   set autoread
   " quickfix模式
  autocmd FileType c,cpp map   :w:make
   "代码补全
   set completeopt=preview,menu
   "允许插件  
  filetype plugin on
   "共享剪贴板  
   set clipboard+=unnamed
   "从不备份  
   set nobackup
   "make 运行
  :set makeprg=g++\ -Wall\ \ %
   "自动保存
   set autowrite
   set ruler                   " 打开状态栏标尺
   set cursorline              " 突出显示当前行
   set magic                   " 设置魔术
   set guioptions-=T           " 隐藏工具栏
   set guioptions-=m           " 隐藏菜单栏
   "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
  " 设置在状态行显示的信息
   set foldcolumn=0
   set foldmethod=indent
   set foldlevel=3
   set foldenable              " 开始折叠
   " 不要使用vi的键盘模式,而是vim自己的
   set nocompatible
   " 语法高亮
   set syntax=on
   " 去掉输入错误的提示声音
   set noeb
   " 在处理未保存或只读文件的时候,弹出确认
   set confirm
   " 自动缩进
   set autoindent
   set cindent
   " Tab键的宽度
   set tabstop=4
   " 统一缩进为4
   set softtabstop=4
   set shiftwidth=4
   " 不要用空格代替制表符
   set noexpandtab
   " 在行和段开始处使用制表符
   set smarttab
   " 显示行号
   set number
   " 历史记录数
   set history=1000
   "禁止生成临时文件
   set nobackup
   set noswapfile
   "搜索忽略大小写
   set ignorecase
   "搜索逐字符高亮
   set hlsearch
   set incsearch
   "行内替换
   set gdefault
   "编码设置
   set enc=utf-8
   set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
   "语言设置
   set langmenu=zh_CN.UTF-8
   set helplang=cn
   " 我的状态行显示的内容(包括文件类型和解码)
   "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
   "set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
   " 总是显示状态行
   set laststatus=2
   " 命令行(在状态行下)的高度,默认为1,这里是2
   set cmdheight=2
   " 侦测文件类型
  filetype on
   " 载入文件类型插件
  filetype plugin on
   " 为特定文件类型载入相关缩进文件
  filetype indent on
   " 保存全局变量
   set viminfo+=!
   " 带有如下符号的单词不要被换行分割
   set iskeyword+=_,$,@,%,#,-
   " 字符间插入的像素行数目
   set linespace=0
   " 增强模式中的命令行自动完成操作
   set wildmenu
   " 使回格键(backspace)正常处理indent, eol, start等
   set backspace=2
   " 允许backspace和光标键跨越行边界
   set whichwrap+=<,>,h,l
   " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
   set mouse=a
   set selection=exclusive
   set selectmode=mouse,key
   " 通过使用: commands命令,告诉我们文件的哪一行被改变过
   set report=0
   " 在被分割的窗口间显示空白,便于阅读
   set fillchars=vert:\ ,stl:\ ,stlnc:\
   " 高亮显示匹配的括号
   set showmatch
   " 匹配括号高亮的时间(单位是十分之一秒)
   set matchtime=1
   " 光标移动到buffer的顶部和底部时保持3行距离
   set scrolloff=3
   " 为C程序提供自动缩进
   set smartindent
   " 高亮显示普通txt文件(需要txt.vim脚本)
  au BufRead,BufNewFile * setfiletype txt
   "自动补全
  :inoremap ( ()i
  :inoremap ) =ClosePair(')')
  :inoremap { {}O
  :inoremap } =ClosePair('}')
  :inoremap [ []i
  :inoremap ] =ClosePair(']')
  :inoremap " ""i
  :inoremap ' ''i
   function! ClosePair(char)
       if getline('.')[col('.') - 1] == a:char
          return "\"
       else
          return a:char
      endif
  endfunction
  filetype plugin indent on
   "打开文件类型检测, 加了这句才可以用智能补全
   set completeopt=longest,menu
   """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   " CTags的设定  
   """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  let Tlist_Sort_Type = "name"    " 按照名称排序  
  let Tlist_Use_Right_Window = 1  " 在右侧显示窗口  
  let Tlist_Compart_Format = 1    " 压缩方式  
  let Tlist_Exist_OnlyWindow = 1  " 如果只有一个buffer,kill窗口也kill掉buffer  
  let Tlist_File_Fold_Auto_Close = 0  " 不要关闭其他文件的tags  
  let Tlist_Enable_Fold_Column = 0    " 不要显示折叠树  
  autocmd FileType java set tags+=D:\tools\java\tags  
   "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags  
   "let Tlist_Show_One_File=1           "不同时显示多个文件的tag,只显示当前文件的
   "设置tags  
   set tags=tags  
   "set autochdir
   
   
   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   "其他东东
   """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
   "默认打开Taglist
  let Tlist_Auto_Open=1
   """"""""""""""""""""""""""""""
   " Tag list (ctags)
   """"""""""""""""""""""""""""""""
  let Tlist_Ctags_Cmd = '/usr/bin/ctags'
  let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
  let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
  let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
   " minibufexpl插件的一般设置
  let g:miniBufExplMapWindowNavVim = 1
  let g:miniBufExplMapWindowNavArrows = 1
  let g:miniBufExplMapCTabSwitchBufs = 1
  let g:miniBufExplModSelTarget = 1

如何在Vim中执行Linux命令

由于 Vim 编辑器中支持直接执行 Linux 命令,从而可以方便快捷地对文件完成以下操作:

  1. 将一个命令的输出结果存入正在编辑的文件;

  2. 将正在编辑的文件中的一些数据作为某个指定 Linux 命令的输入。

按 Esc 令 Vim 返回到命令模式,再按下!!,这时在窗口的左下角会出现:.!的提示信息,这就表明我们可以输入 Linux 命令了。例如,我们输入 date 命令,如图 1 所示:

窗口左下角的:.!表示操作文本的范围,其中 . 表示从光标所在行开始,! 表示后续会执行 Linux 命令,整体表示命令的执行结果将插入到光标所在行的位置,因此,如果光标所在位置处有数据,就会被命令的执行结果直接覆盖掉。

使用 sort 命令对选中文本按照第 1 列进行降序排序,执行命令如下:

:.,$!sort -nr -k1

表 3 Vim执行Linux命令的方式

格式功能
:!命令直接运行一个 Linux 命令,运行完毕之后,即可返回到 Vim 中。
:w!命令将 Vim 中所有的文本内容作为指定命令的输入。但命令的执行结果不会写入到当前文件中。
:r!命令将命令执行的结果写入到当前 Vim 中,例如 :!ls 表示将 ls 的执行结果输入到 Vim 中。
:nr!命令其中 n 为数字,表示将命令的执行结果写入到 Vim 第 n 行的位置。例如,:3r!date 表示将 date 命令的执行结果写入到第 3 行文本处。
:n,m!命令其中 n 表示起始行号,m为结束行号,功能是将 Vim 中指定的部分文本作为某个命令的输入,同时将命令的输出也插入到当前指定的位置。
:n,m w!命令其中 n 表示起始行号,m为结束行号,其功能是 Vim 中指定的部分文本作为某个命令的输入,但命令的执行结果不会写入到文件中。
!!date向 Vim 中插入当前时间。

#

相关新闻
热点
视频
投票
查看结果
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量:

© 2025 个人网站 版权所有

备案号:苏ICP备2024108837号

苏公网安备32011302322151号