一、vi/vim 基本使用方法
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的配置和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。
下载安装 vim:yum -y install vim*
查看:
vi有三种模式:
(1)一般模式:进入vi的默认模式,能够进行复制、黏贴、删除等操作;
(2)编辑模式:从一般模式按下‘i’即可进入;
(3)命令行模式:从一般模式按下“:”、'?'、'/'即可进入;
“一般模式”的常用按键
h | 向左 | G | 光标移到最后一行 |
J | 向下 | nG | 光标移动到第n行 |
K | 向上 | gg或1G | 光标移动到第一行 |
l |
向右 |
/hello | 向下查找hello |
10h | 向左10个字符 | ?hello | 向上查找hello |
10j |
向下10行 |
u | 撤销 |
10k |
向上10行 |
x | 向后删除一个字符 |
10l | 向右10个字符 | X | 向前删除一个字符 |
n[空格] | 光标向右移动n个字符 | 3x | 向后删除3个字符 |
N[Enter] |
跳到第n行 |
1.在~/.vimrc中添入以下代码
(在此我是在#/home/usr/下添加的)
"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
"
"
"
nmap <leader>w :w!<cr>
nmap <leader>f :find<cr>
" 映射全选+复制 ctrl+a
"
" map <C-A> ggVGY
"
" map! <C-A> <Esc>ggVGY
"
" map <F12> gg=G
"
" " 选中状态下 Ctrl+c 复制
"
" vmap <C-c> "+y
"
" "去空行
"
nnoremap <F2> :g/^\s*/d<CR>
"
" "比较文件
"
" nnoremap <C-F2> :vert diffsplit
"
" "新建标签
"
" map <M-F2> :tabnew<CR>
"
" "列出当前目录文件
"
" map <F3> :tabnew .<CR>
"
" "打开树状文件目录
"
" map <C-F3> \be
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 设置当文件被改动时自动载入
"
" set autoread
"
" " quickfix模式
"
" autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
"
" "代码补全
"
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 ( ()<ESC>i
"
:inoremap ) <c-r>=ClosePair(')')<CR>
"
:inoremap { {<CR>}<ESC>O
"
:inoremap } <c-r>=ClosePair('}')<CR>
"
:inoremap [ []<ESC>i
"
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
"
:inoremap ' ''<ESC>i
"
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
"
return "\<Right>"
"
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
"
"--ctags setting--
"" 按下F5重新生成tag文件,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=/usr/local/bin/ctags "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
set tags+=./tags "tags表示在当前工作目录下搜索tags文件
set tags+=/usr/local/bin/ctags "表示在搜寻tags文件的时候,也要搜寻~/usr/文件夹下的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
对于上面的代码自己可以根据自己的需求设定(在上述代码中前面有引号的是注释掉的,如果你需设定哪个,就把前面的注释去掉)
2.添加完成后::wq保存退出
3.输入下面命令:
cd /
ls -al
就可以查看此时 .vimrc存在;
4.然后用vim自己编辑一个程序:
此时就可以看见有效果了,“行数”,“语法高亮”“括号自动补全”等。
1.ctags
(1)到http://ctags.sourceforge.net/下
载ctags源码ctags-5.6.tar.gz
(2)在自己的linux中浏览器粘贴以下地址
http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz
然后下载到“下载”目录中
(3)解压并安装
在控制台输入 #cd "下载"
(4) tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install
(5)完成后 ls
在其中有个ctags
(6)将其分别拷贝一份到 #/usr/src 和# /home/hero 下(在此hero 是自己在home下的用户名)
cp ctags /usr/src 拷贝
cp ctags /home/hero
(7)然后进入cd /usr/src 目录下输入命令ctags -R:
此时该目录下生成一个tags文件
(8)同样 再进入cd /home/hero 目录下输入命令ctags -R:
命令:ls 在此目录下也生成个 tags
(9)完成上述步骤后
打开开始创建的 .vimrc文件(ps如果命令不好找就直接在桌面”计算机“中找)
因为.vimrc是隐藏文件 所以在“查看”中勾选“显示隐藏文件”就可以看见隐藏文件
在其中加入以下代码
" "--ctags setting--
" "" 按下F5重新生成tag文件,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
" 按下F5重新生成tag文件,并更新taglist
set tags=tags
" set tags+=./tags "add current directory's generated tags file
set tags+=~/home/hero/tags "add new tags file(刚刚生成tags的路径,在ctags -R
" 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
set tags+=/usr/src/tags
在上面 只要将第二个用户名一改就可以了
然后自己vim一个程序 将鼠标移到printf上 按ctrl+w+] 就可以看见printf定义 ctrl+o 返回