• 非root配置linux下vim


    在机子目录下建立 .vim文件夹

    例如 /home/xxx/.vim

    在~文件夹下建立.vimrc文件 这是你自己配置文件

    vim虽然启用了格式化高亮、行号显示,以及括号匹配、自动缩进等编辑功能,对于大多数情况都可以获得理

    想的编辑体验。不过此时对.php文件的支持还不完善,需要下载专门的php插件。

    下载地址:http://www.vim.org/scripts/script.php?script_id=1571
    下载文件:php.tar.gz

    将其中的php.vim复制到.vim/syntax目录中即可。

    一开始在设置里更换主题一直无法显示,后来找到问题的原因:

    一般的Linux发行版默认的终端都是16色的,但事实上几乎所有的终端都支持256色终端。

    1.将Terminal设为Xterm模式:编辑->配置文件首选项->颜色 设置为自定义,内置方案选择XTerm.

    2.vimrc里设置:set t_Co=256

    然后就可以随便color自己喜欢到主题了。我是用的:colorscheme desert。

    打造PHP IDE

    IDE左侧是目录导航,中间是编辑区域,而右侧则是方法列表,用于在已经打开的文件中快速跳转。在编辑区

    域按下CTRL+X键,还会显示已打开文件的列表。 

    其他诸如自动补全、代码模板等功能,都应有尽有。看过了漂亮的截图,我们就来一步步打造PHP IDE吧。

    用NERDTree实现目录导航

    在进行PHP应用开发时,同时编辑多个文件是很正常的事情。所以必须有一个方便的目录导航工具,以便在目

    录结构间快速切换,找到需要编辑的文件。

    vim中提供该类功能的插件很多,比较知名的有project、winmanager等。但笔者个人认为最好用的还是The

    NERD Tree这个插件。NERDTree不但可以显示完整的目录树结构,还可以将任何一个目录设置为根目录。并

    且提供了目录导航的书签功能,可谓非常方便。

    下载地址:http://www.vim.org/scripts/script.php?script_id=1658
    下载文件:NERD_tree.zip

    解压缩时,要把压缩包中的目录结构完整的解压缩到$VIMvimfiles目录中。完成后,应该分别找到$VIM

    vimfilesdocNERD_tree.txt文件和$VIMvimfilespluginNERD_tree.vim文件。然后在vim中输入命令:helptags

    $VIMvimfilesdoc,将NERDTree的帮助文档添加到vim中。

    最后在_vimrc添加如下内容:

    ” NERDTree

    map <F8> :NERDTreeToggle<CR>

    重启vim后,按下F8键,就可以在左侧看到一个目录树了。在目录树窗口中按下?键可以查看详细的帮助信息

    最常用的操作键有:

     按键  作用
     C(大写C键)  将光标所在目录设置为根目录
     u(小写u键)  转到上一级目录
     o(小写o键,不是“零”)  展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件

    此外在目录树窗口中输入目录:Bookmark 收藏名还可以将光标所在目录添加到收藏夹中。下次使

    :BookmarkToRoot 收藏名可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考NERDTree的

    帮助文档。

    用taglist实现代码导航

    解决了目录和文件导航问题,我们还要为代码之间的跳转提供辅助手段,taglist就是这样一个插件。taglist可以

    列出已打开文件中定义的类、函数、常量,甚至变量。

    下载地址:http://www.vim.org/scripts/script.php?script_id=273
    下载文件:taglist_45.zip

    压缩包需要完整解压缩到$VIMvimfiles目录,并且用:helptags $VIMvimfilesdoc命令索引taglist插件的帮助文

    档。taglist插件需要依赖ctags程序才能工作。目前常用的ctags版本是Exuberant Ctags。

    sudo apt-get install ctags,然后whereis ctags,找到ctags: /usr/bin/ctags 这目录下的ctags。

    将ctags复制到$VIMvim72目录中即可。

    最后在/etc/vim/vimrc添加下列内容,设置好taglist插件:

    “”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"

    ” => Plugin configuration

    “”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"

    ” taglist

    let Tlist_Auto_Highlight_Tag = 1

    let Tlist_Auto_Open = 1

    let Tlist_Auto_Update = 1

    let Tlist_Close_On_Select = 0

    let Tlist_Compact_Format = 0

    let Tlist_Display_Prototype = 0

    let Tlist_Display_Tag_Scope = 1

    let Tlist_Enable_Fold_Column = 0

    let Tlist_Exit_OnlyWindow = 0

    let Tlist_File_Fold_Auto_Close = 0

    let Tlist_GainFocus_On_ToggleOpen = 1

    let Tlist_Hightlight_Tag_On_BufEnter = 1

    let Tlist_Inc_Winwidth = 0

    利用ctrl+ww来进行两个窗口之间的切换。

    taglist窗口中,可以使用下面的快捷键:

    <CR>       跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
    o             在一个新打开的窗口中显示光标下tag
    <Space>  显示光标下tag的原型定义
    u             更新taglist窗口中的tag
    s             更改排序方式,在按名字排序和按出现顺序排序间切换
    x             taglist窗口放大和缩小,方便查看较长的tag
    +             打开一个折叠,同zo
    -             将tag折叠起来,同zc
    *             打开所有的折叠,同zR
    =            将所有tag折叠起来,同zM
    [[            跳到前一个文件
    ]]            跳到后一个文件
    q            关闭taglist窗口
    在vimrc中加下面设置可以按F6打开关闭taglist
    "函数和变量列表
    map <F6> :TlistToggle<CR>

    用AutoComplPop实现代码自动提示

    点击下面网址,进去下载autocomplpop插件

    http://www.vim.org/scripts/script.php?script_id=1879

    下载的是一个zip文件,解压后会有三个文件夹,分别是autoload,doc,plugin。到Vim的根目录下,找到名字

    和这三个一样的文件夹。不同系统目录位置不同。我的fedora是/usr/share/vim/vimfiles

    按照文件夹对应的把里面的acp.vim和其他的什么文件都copy过去。然后重启Vim。这时候可能会有错误提示

    Error detected while processing /home/carlos/.vim/plugin/acp.vim:
    line 13:
    ***** L9 library must be installed! *****

    这是插件放出的一个错误提示,查看plugin里的acp.vim可以看到。是缺少L9 library库。这个也是需要下载的。地址在下面

    http://www.vim.org/scripts/script.php?script_id=3252

    下载下来,它也是一个插件形式,以同样的方式copy到Vim目录下。

    安装完后就可以了。

    再就是这个插件默认是没有设置php自动补全的,可以设置一个PHP函数字典,让其根据字典的内容进行自动

    补全。

    这个是一个PHP字典:.
    
    编辑配置文件.vimrc,在文件后面加上下面的代码
    
    au FileType php setlocal dict+=/etc/vim/php_funclist.txt
    
    后面跟着的是字典的目录地址,根据自己的需求存放在一个地方就好。我是放到了/etc/vim/目录下。
    
    php_funclist下载:php_funclist.tar.gz
    

    再附加一些自动补全配置(加入到vimrc中):

    php 中 一般是会在 "$", "->", "::" 后需要出现自动补全,在 .vimrc 中加入以下代码:

    if !exists('g:AutoComplPop_Behavior')
        let g:AutoComplPop_Behavior = {}
        let g:AutoComplPop_Behavior['php'] = []
        call add(g:AutoComplPop_Behavior['php'], {
                   'command'   : "<C-x><C-o>", 
                   'pattern'   : printf('(->|::|$)k{%d,}$', 0),
                   'repeat'    : 0,
                })
    endif
    

    在 Vim 中实现括号自动补全:

    :inoremap ( ()<ESC>i
    :inoremap ) <c-r>=ClosePair(')')<CR>
    :inoremap { {}<ESC>i
    :inoremap } <c-r>=ClosePair('}')<CR>
    :inoremap [ []<ESC>i
    :inoremap ] <c-r>=ClosePair(']')<CR>
    :inoremap < <><ESC>i
    :inoremap > <c-r>=ClosePair('>')<CR>

    function ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
    return "<Right>"
    else
    return a:char
    endif
    endf

    这样,写代码的时候不再担心会丢掉右边的括号了,尤其是函数嵌套的时候。

    安装ZenCoding插件

    http://github.com/mattn/zencoding-vim下载压缩包,然后解压到vimfiles文件夹,和上面一样,将doc plugin

    autoload三个文件夹放到相应文件夹下。然后在vim中输入helptags /etc/vim/doc 导入帮助文件.就OK了。

    zencoing可以很方便的写html,一些常用命令:

    输入 div>p#foo$*3>a 这样的缩写,然后按 ctrl + y + , 来展开(注意那个逗号),展开后它应该是这个样子的

     <div>
          <p id="foo1">
              <a href=""></a>
          </p>
          <p id="foo2">
              <a href=""></a>
          </p>
          <p id="foo3">
              <a href=""></a>
          </p>
      </div>
    
    • 多行缩写

    输入如下:

    test1
    test2
    test3
    

    然后进入行选择模式,选中这三行按 ctrl + y + ,,接着它会提示你要使用的tag名称,TAG: 输入 ‘ul>li* 会变成如下的样子

    <ul>
        <li>test1</li>
        <li>test2</li>
        <li>test3</li>
    </ul>
    

    如果是输入blockquote,那么会变成这样

      <blockquote>
          test1
          test2
          test3
      </blockquote>
    
    • 跳转到下一个标签编辑位置

    输入ctrl + y + n 进入插入模式

    • 跳转到上一个标签编辑位置

    输入ctrl + y + N 进入插入模式

    • 更新标签中图片大小

    假如有以下内容

    <img src="foo.png" />
    

    光标移动到img标签上,按下ctrl + y + i 该插件会自动获取foo.png的大小并插入宽高属性 看起来像这个样子

    <img src="foo.png" width="32" height="48" />
    
    • 切换注释

    如有以下段

    <div>
        hello world
    </div>
    

    光标移动到此段落,输入ctrl + y + /变成

    <!-- <div>
        hello world
    </div> -->
    

    再次输入则还原

    • 生成url连接

    将光标移动到一个url上,如:

    http://www.google.com/
    

    输入ctrl + y + a 它会自动获取url页面的标题并生成一个连接

    <a href="http://www.google.com/"></a>
    

    Zen Coding官方提供的速查手册(PDF):http://zen-coding.googlecode.com/files/ZenCodingCheatSheet.pdf

    不过一般不需要使用那么复杂的功能,一个vim就够了

    我的配置


    "显示行数
    set number

    "设置编码
    set encoding=utf-8
    set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
    set fileencoding=utf-8
    set termencoding=utf-8

    "不要使用vi的键盘模式,vim's
    set nocompatible

    "history文件中需要记录的行数
    set history=400

    "与windows共享剪贴板
    set clipboard+=unnamed

    "支持鼠标事件,点击定位等
    set mouse=a

    "侦测文件类型
    filetype on

    "载入文件类型插件
    filetype plugin on

    "为特定文件类型载入相关缩进文件
    filetype indent on

    "语法高亮
    syntax enable
    syntax on

    "高亮显示匹配的括号
    set showmatch

    "设置缩进
    "制表符为4
    set tabstop=4

    "统一缩进为4
    set softtabstop=4
    set shiftwidth=4
    "
    "继承前一行的缩进方式,特别适用于多行注视
    set autoindent

    "使用C样式的缩进
    set cindent

    "设置C/C++语言的具体缩进方式(以我的windows风格为例):

    set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
    if &term=="xterm"
        set t_Co=8
        set t_Sb=^[[4%dm
        set t_Sf=^[[3%dm
        endif

    "显示下划线
    "set cursorline

    关于c/c++语言的一些配置

    "新建.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: "
            call append(line(".")+2"# mail: "
            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: "
            call append(line(".")+2"    > Mail:  "
            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<iostream>")
            call append(line(".")+7"using namespace std;")
            call append(line(".")+8"")
        endif
        if &filetype == 'c'
            call append(line(".")+6"#include<stdio.h>")
            call append(line(".")+7"")
        endif
        "新建文件后,自动定位到文件末尾
        autocmd BufNewFile * normal G
    endfunc 
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "键盘命令
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    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> e  
    "C,C++ 按F5编译运行
    map <F5> :call CompileRunGcc()<CR>
    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 <F8> :call Rungdb()<CR>
    func! Rungdb()
        exec "w"
        exec "!g++ % -g -o %<"
        exec "!gdb ./%<"
    endfunc
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    ""实用设置
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    " 设置当文件被改动时自动载入
    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

    如果出现can not find 这些错误

    可以设置vim目录

    let $VIMRUNTIME="/usr/share/vim/vim70"
    set runtimepath=/usr/share/vim/vim70

  • 相关阅读:
    hdu 3786 寻找直系亲属
    about the plan
    2013 ACM/ICPC Asia Regional Online —— Warmup1 1005 Balls Rearrangement
    poj 1833 给poj跪了 字典排序
    20170630总结
    20170701总结
    20170628总结
    20170629总结
    20170626总结
    20170627总结
  • 原文地址:https://www.cnblogs.com/breg/p/3630961.html
Copyright © 2020-2023  润新知