Linux-----vim程序编辑器

1、vi和vim 

    1.1 为何要学vim

        所有Unix like系统中会内置vi文书编辑器,可以编辑程序,程序简单编辑速度快。很多软件的编辑接口会主动调用vim。vim可以看作vi的进阶版本,vim号称编辑器之神,还是很有学习的必要的。

 2、vi的使用

        基本上vi共分为三种模式,分别是“一般指令模式、编辑模式、和命令行命令模式”三种模式的作用分别是:

        *一般指令模式(command mode)

        以vi打开一个文件就直接进入一般指令模式,默认模式也简称一般模式,在这个模式中,你可以使用上下左右按键移动光标,你可以使用删除字符和删除整列来处理文件内容。也可以使用复制、贴上来处理你的文件数据。

        *编辑模式(insert mode)

         在一般模式中可以进行删除、复制、贴上等动作,但是无法编辑文件内容,等你按下“i,l,o,O,a,A,r,R”等任何一个字符会进入编辑模式,在下方会出现insert,replace的字样,此时才可以编辑。回到一般指令模式,按下ESC会退出编辑模式。

        *命令行命令模式(command-line mode)

        在一般模式下输入“:/ ?”三个中任何一个按钮,就可以将光标移动到最下面一列,在这个模式中可以提供搜寻数据的动作,而读取、存盘、大量取代字符、离开vi,显示行号等动作都是在此模式中达成的。

    2.1 按键说明

    第一部分:一般模式可使用的按钮说明,光标移动、复制粘贴、搜寻取代

        

    第二部分:一般指令模式切换到编辑模式可用按钮说明

        

    第三部分:一般指令模式切换到命令行界面可用按钮说明

     

    2.2 vim 的暂存盘、救援回复与打开时的警告讯息、

        在vim编辑文件的时候会在同一个目录下会再创建一个名为.filename.swp的文件,如果因为某些原因断线,导致你编辑的文件还没有保存,那么就会将之前的操作记录记录在.filename.swp中。当再次打开这个文件时会出现警告窗口,解决方法是:

        (1)有可能是多用户多任务环境,别人编辑了这个文件,找到另外的人员将他的工作结束,你再处理。

        (2)如果你只是查看该文件内容,那么可以输入英文o,以只读模式打开。

        常见处理办法:

         (1)如果你之前vim处理动作没有储存,按下R,就能recover项目。此时vim会载入之前的项目,由你决定要不要保存。但这样并不会删除.swp文件,离开vim后还需要你自己删除.swp的文件。

        (2)如果你确定这个暂存盘没有用你可以直接按下D删除这个暂存盘。此时vim会载入这个项目并将旧的.swp删除。   

        暂存盘警告信息中六个可用按钮:

        O:打开文件为只读文件

        E:正常打开,不会载入暂存盘,很容易出现两个使用者互相修改对方的文件。

        R:载入暂存盘内容,之后要手动删除.swp文件。、

       D:确定暂存盘无用,打开文件前先将暂存盘删除。

       Q:按下q离开vim。 

       A:忽略这个编辑行为。 

3、vim的额外功能

    3.1 区块选择

        在前面操作单位是以列为单位的,但是如果是操作一个区块就要进入区块选择(visual block),在一般模式下按下V或v或ctrl+v,

        

    3.2 多文件编辑

        vim可以在后面同时接好几个文件同时打开,相关按键:

                

        这个功能可以使你将这个文件内内容复制到另外一个文件。

    3.3 多窗口编辑

       如果需要对照两个文件,在命令行界面输入sp{filename},如果是要启动另一个文件就加入filename如果只输入sp那么会是同一个文件出现在两个窗口。

       

        

                

        貌似无法在多窗口下打开旧的文件,也就是说,多窗口文件一般可以用来在同一个文件中,如果文件比较大,可以使用多窗口对比前后数据等。

    3.4 vim的挑字补全功能

        

    3.5 vim环境设置和记录:~/.vimrc,~/.viminfo

        ~/.vimrc 是关于vim的配置文件,可以在这里进行有关设置以及插件等等的设置。

        ~/.viminfo 是记录动作的文件。

        将我的配置文件保存在这里。配置文件里双引号开头的是注释。在这个配置里还有一些插件,这个以后再说。

" This line should not be removed as it ensures that various options are
    " properly set to work with the Vim-related packages available in Debian.
   " runtime debian.vim

    " Uncomment the next line to make Vim more Vi-compatible
    " NOTE: debian.vim sets 'nocompatie'. Setting 'compatible' changes numerous
    " options, so any other options should be set AFTER setting 'compatible'.
    set nocompatible

    " Vim5 and later versions support syntax highlighting. Uncommenting the
    " following enables syntax highlighting by default.
    if has("syntax")
      syntax on            " 语法高亮
    endif
    colorscheme ron        " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下

    " detect file type
    filetype on
    filetype plugin on

    " If using a dark background within the editing area and syntax highlighting
    " turn on this option as well
    set background=dark

    " Uncomment the following to have Vim jump to the last position when
    " reopening a file
    if has("autocmd")
      au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
      "have Vim load indentation rules and plugins according to the detected filetype
      filetype plugin indent on
    endif

    " The following are commented out as they cause vim to behave a lot
    " differently from regular Vi. They are highly recommended though.

    "set ignorecase        " 搜索模式里忽略大小写
    "set smartcase        " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
    set autowrite        " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
    set autoindent        " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
    "set smartindent        " 智能对齐方式
    set tabstop=4        " 设置制表符(tab键)的宽度
    set softtabstop=4     " 设置软制表符的宽度    
    set shiftwidth=4    " (自动) 缩进使用的4个空格
    set cindent            " 使用 C/C++ 语言的自动缩进方式
    set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "设置C/C++语言的具体缩进方式
    "set backspace=2    " 设置退格键可用
    set showmatch        " 设置匹配模式,显示匹配的括号
    set linebreak        " 整词换行
    set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
    "set hidden " Hide buffers when they are abandoned
    set mouse=a            " Enable mouse usage (all modes)    "使用鼠标
    set number            " Enable line number    "显示行号
    "set previewwindow    " 标识预览窗口
    set history=50        " set command history to 50    "历史记录50条
     

    "--状态行设置--
    set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
    set ruler            " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。

    "--命令行设置--
    set showcmd            " 命令行显示输入的命令
    set showmode        " 命令行显示vim当前模式

    "--find setting--
    set incsearch        " 输入字符串就显示匹配点
    set hlsearch
    "--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+=/usr/include/c++/tags
   " set tags+=~/home/zl/Dwonload/cpp_src/cpp
    " set tags=tags
    set tags+=./tags "add current directory's generated tags file
"    set tags+=~/linux/linux-2.6.22.6/tags "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
    "-- omnicppcomplete setting --
    " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
    imap <F3> <C-X><C-O>
    " 按下F2根据头文件内关键字补全
    imap <F2> <C-X><C-I>
    set completeopt=menuone,menu,longest,preview " 关掉智能补全时的预览窗口
    let OmniCpp_MayCompleteDot = 1 " autocomplete with .
    let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
    let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
    let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
    let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
    let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
    let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
    let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
    let OmniCpp_DefaultNamespaces=["std","_GLIBCXX_STD"]
    let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
    let OmniCpp_ShowAccess=1 
    let OmniCpp_NamespaceSearch = 1
    set tags+=/home/zl/tags/c++/tags
   
    au BufNewFile,BufRead,BufEnter *.cpp,*.hpp
    set omnifunc=omni#cpp#complete#Main   
    au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif 
    set encoding=UTF-8
	set langmenu=zh_CN.UTF-8
	language message zh_CN.UTF-8
	set fileencoding=utf-8


    
    au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif 
    set encoding=UTF-8
	set langmenu=zh_CN.UTF-8
	language message zh_CN.UTF-8
	set fileencoding=utf-8
    let g:syntastic_cpp_compiler_options='-std=c++11 -stdlib=libc++'
   

    3.6 常用指令示意图

        

4、 其他使用事项

    4.1 中文编码问题

        这里的原因可能有很多,可能你的linux系统支持语系数据,你的终端接口的语系,文本的编码,打开终端的软件等等,在ubuntu下常用的解决办法是:

        在vim配置文件里修改编码加入以下设置:

set fileencodings=gb2312,utf-8
set fileencoding=gb2312
set termencoding=utf-8

        在ubuntu下可以安装搜狗拼音。

    4.2 DOS与linux的断行字符

        因为两者断行字符不一致可能会导致程序无法执行,那么需要进行格式转换。

        

    4.3 语系编码转换

        

5、重点回顾

        (1)vim的三种模式,直接的切换。

        (2)vim的常用功能。

        (3)使用:sp可以分区窗口

        (4)vim的配置文件很强大,可以支持很多插件可以配合你将vim修改的无限接近windows下的IDE。

 

 

                                                      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值