在这里我们来讨论一下vi和vim编辑器的一些简单操作,vi和vim编辑器可以实现对文件的创建、修改、编辑等基本操作,如果系统的多个用户同时打开编辑同一个文本,以最后一个用户保存为主。
vi和vim的工作模式:是一个文本编辑器(类似windows系统下的记事本);
在vi编辑器下有三种模式:
1、命令行模式
2、插入模式
3、编辑模式
三者之间的关系如下图:
命令模式:所在键盘上打字都可能是命令;
下面我们来看看vi下面的一些命令:
i:在当前位置前插入;
I:在光标所在行开始位置插入;
a:在光标当前位置后面插入;
A:在光标所在行末插入;
o:在光标坐在行和下一行之间插入新的行;
O:在光标所在行和上一行之间插入新的行;
如果你想在vi编辑页面显示出行号或者取消行号,可以在编辑模式下输入:
set nu//显示行号
set nonu//取消显示行号
退出出vi编辑器:
1、从命令行模式下:键入ZZ
2、从编辑模式下:q退出、wq写入并退出、wq!强制写入并推出、q!强制退出、w file_name 另存为 也可以是另外路径的文档、x保存退出、x!强制保存退出;
命令行模式定位:
h:左移一个字符;
j: 下移一个字符;
k:上移一个字符;
l:右移一个字符;
$:直接移至行尾;
0:移至行首;
Enter:移至下行行首;
H:移至屏幕上端(不是文本)
M:移至屏幕中间;
L:移至屏幕下端;
G:移至到文本最后一行;
nG:移至文本第n行
命令行模式删除命令:
x:删除光标所在出的字符,按一次删除一个字符,向后删除;
X:和x相反;
dd:删除光标所在的行;
dG:删除光标所在行和光标所在行以下所有行;
D: 删除光标所在位置到本行行末;
删除n1~n2行:在编辑模式下输入:
n1,n2d//Enter
命令行模式下的复制命令:
yy,Y//复制当前行;
nyy,nY//复制当前行以下几行;
p//将以选择复制或者已经被删除的行放在当前行下,类似粘贴和剪切;
"+y 复制选中内容到+寄存器,也就是系统的剪贴板,供其他程序用
复制vim文件中所有内容:
按esc后,然后ggyG //仅可以在当前文件中粘贴
全选高亮显示:按esc后,然后ggvG或者ggVG
要复制到别的地方,用 "+y 来复制,注意是三个字符。gg"+yG
命令行模式下替换和取消命令:
r:取代光标当前位置的字符;
R:从光标所在位置开始替换字符,按Esc停止替换;
s:替换光标所在处字符,并进入文本输入模式;
S:替换光标所在全行,按Esc结束;
u:取消上一步的操作(可以取消到文件打开的时候)
U:取消当前行之前的所有操作
搜索和替换:
命令行搜索字符串:
/string
?string
n向下搜索(/) ?
N向上搜索(?) ?
编辑模式下下替换:
%s/old/new/g //将旧的换成新的,没有空格
%s/old/g //将搜索到内容删除,没有空格
将文件读入到当前位置(编辑模式):“r+文件名”
查看ip本机地址,在编辑模式下:“!ifconfig”
也可以在编辑模式下进行执行关机等系统操作:
!+操作系统命令:
!clear
!shutdown -h now/10
!reboot
!pwd
...
也可以打开多个文件(命令行模式):
vi -o file1 file2 //水平查看
vi -O file1 file2 //垂直查看
ctrl+ww //可以在两个文件之间切换
vi的配置文件在每个用户的家目录下,隐藏文件: .vimrc(默认是不存在的)
配置vi编辑器:
1、可以在家目录下建立.vimrc把准备好的vimrc的内容复制过去
2、也可以在/etc目录下,找到vimrc文件,把准备好的vimrc文件替换。
vim编程中使用到的快捷键:
g + ] 可以查看当前函数的所有位置的定义
[[跳到函数头部,]]跳到函数尾部
自动补全:ctrl + n或者ctrl + p
如果无法匹配就先去配置ctags
vim的历史命令记录和查看:
1、在vim打开文件的时候,在命令行模式下按q会开始记录操作命令
2、先按esc接着按q后按: //可以查看历史操作,同vim插入操作按键,进入历史命令记录文件编辑状态,增加命令或者删除操作过的命令
3、同2按q和/搭配,同样查看vim历史操作命令
4、按下ctrl+c会退出查看但不会退出vim
高亮搜索匹配:
shift + * 在当前文件中向后搜索光标所在单词,并高亮显示
shift + # 在当前文档中向前搜索光标所在单词,并高亮显示
二者到了文件尾部或者头部都会循环进行搜索显示
搜索字符串后,按n和N会分别向后或向前匹配字符串
:set hlsearch 高亮所有匹配的字符串
:nohlsearch 临时关闭
:set nohlsearch 彻底关闭,只有重新:set hlsearch才可以高亮搜索
查找文件中所有该单词,就将光标移动到该单词所在地方,按下gd会高亮显示该文件中所有该单词
语法高亮
(如果没有配置vim配置文件vimrc时使用,配置过不需要重新设置)
syntax on
syntax off
vim grep /匹配模式/[g][j] 要搜索的文件/范围:
g: 表示是否把每一行的多个匹配结果都加入
j: 表示是否搜索完后定位到第一个匹配的位置
vimgrep /pattern/% 在当前打开文件中查找
vimgrep /pattern/ * 在当前目录下查找所有
vimgrep /pattern/ ** 在当前目录及其子目录下查找所有
vimgrep /pattern/ *.c 查找当前目录下所有的.c文件
vimgrep /pattern/ */ 只查找子目录
cn 查找下一个
cp 查找上一个
copen 打开quickfix
cw 打开quickfix
cclose 关闭quickfix
help vimgrep 查看vimgrep帮助
通过:vimgrep /pattern/gj path来查找字符串,最好将右边的文件列表显示栏关闭,这样quickfix窗口显示比较方便查看。
vim颜色配置方案:
highlight 可以查看具体的颜色配置
highlight LineNr term=underline,bold ctermfg=3 guifg=Brown
Set colorcolumn=80 设置边界线为80列
Set colorcolumn=0 取消边界线设置
Highlight colorcolumn ctermbg=4 guibg=Blue
:help cterm-colors可以查看颜色对应的值
vim配置文件内容:
1、直接修改/etc目录下的vimrc(redhat)文件(ubuntu/etc/vim/vimrc),所有用户的vim都配置了
2、只修改当前用户的vim配置文件,在家目录下修改.vimrc文件即可:
#:cd
#:vi .vimrc
修改了配置文件vimrc并保存后,如果希望不重启vim而让配置立即生效,可以在打开的vim中执行:source path/vimrc
"=========================================================================
"" DesCRiption: 适合自己使用的vimrc文件,for Linux/Windows, GUI/Console
"
"" Last Change: 2010年08月02日 15时13分
"
"" Version: 1.80
"
""=========================================================================
set tags=/root/linux-3.17.2/tags
set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
set number " 显示行号
set autoindent " 自动对齐
set smartindent " 智能对齐
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set ts=1 " 设定 tab 长度为 4
"set tabstop=1 " 设定 tab 长度为 4
set expandtab " use space instead of tab
set shiftwidth=0 " 设定 > 命令移动时的宽度为 4
set softtabstop=1 " 使得按退格键时可以一次删掉 4 个空格
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
filetype plugin indent on " 开启插件
set backupcopy=yes " 设置备份时的行为为覆盖
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set nowrapscan " 禁止在搜索到文件两端时重新搜索
set incsearch " 输入搜索内容时就显示搜索结果
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
" set showmatch " 插入括号时,短暂地跳转到匹配的对应括号
" " set matchtime=2 " 短暂跳转到匹配括号的时间
" set magic " 设置魔术
" set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由
" vim 负责保存
" set guioptions-=T " 隐藏工具栏
" set guioptions-=m " 隐藏菜单栏
" set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start
" " 不设定在插入状态无法用退格键和 Delete
" 键删除回车符
" set cmdheight=1 " 设定命令行的行数为
" 1
" set laststatus=2 " 显示状态栏
" (默认值为 1, 无法显示状态栏)
" set statusline=\ % @=((foldclosed(line('.'))
" " 用空格键来开关折叠
" " return OS type,
" eg: windows, or
" linux, mac, et.st..
" function! MySys()
" if has("win16")
" || has("win32")
" || has("win64")
" || has("win95")
" return
" "windows"
" elseif
" has("unix")
" return
" "linux"
" endif
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
set nonu