Skip to content Skip to main navigation Skip to footer

vim

vim: Emacsist文摘第三期: 最好的编辑器不是Emacs也不是Vim

点这里 查看更多Emacs 相关推荐文章 或最新 Emacs 圈的动态. 欢迎关注微信公众账号: Emacsist

Hick叽喳:

    最好的编辑器不是Emacs也不是Vim ,是Emacs和Vim: Spacemacs

欢迎通过 http://emacsist.com/weixin 中的各种渠道推荐不错的文章, 我会根据情况整理并署名转荐大家 🙂

长按下面二维码关注 Emacs 公众账号分享交流 Emacs 的使用:

原文出处:hick

原文地址: http://emacsist.com/10265

原文时间: 2015-06-10 04:19

本文由 Hick整理,转载请保留以上信息;

The articles on this site come from Internet, thanks to all the original authors.

If anything about COPYRIGHT, or LEFT, please contact Emacsist at gmail dot com .

原文:http://emacsist.com/10265

vim: VIM编辑器常用功能整理笔记

vim编辑器

vi : visual Inertface 可视化接口

vim : vi improved 扩展版

语法着色

模式化编辑器 :

编辑模式(命令模式): 默认模式

输入模式:

末行模式:

等待输入命令

10d 删除第十行

10,20d

set nu 显示行号

! ls /etc 不用退出文件输入 系统shell命令

模式转换

编辑–> 输入

小写

i:在当前光标位置前面输入

a:在当前光标位置后面输入

o:在当前光标下一行新建一行 输入内容

大写

I 行首

A 行尾

O 上一行新建一行

输入–> 编辑   ESC

编辑–>末行: 必须得从编辑模式进入 只需要输入:冒号

末行–> 编辑: esc esc

vim: VIM编辑器常用功能整理笔记
vim: VIM编辑器常用功能整理笔记

功能介绍:

一、 打开文件

vim +12 光标到12行

vim + 打开光标到末尾

vim +/PATERN 打开文件定位到第一次匹配的位置

二、关闭文件

末行模式关闭文件 : wq ==:x

编辑模式关闭文件 : 大写ZZ 保存退出 就是 shift+zz

三、移动光标(编辑模式 )

1. 逐个字符移动 (手的位置)

h

l

j 下

k 上

8l 向左移动8个字符

2.逐单词移动

w 移到下一个单词的词首

e 移到当前或者下一个单词的词尾

b 移到当前或者前一个单词的词尾

3w 向后跳3个单词

3.行内跳转

0(零) 绝对行首

^ 行首的第一个非空白字符

$ 绝对行尾

4.行间跳转

#G 跳转至第#行

G 跳转到最后一行

末行模式下: 直接给行号回车

四、翻屏

crtl+f:向下翻一屏

crtl+b:向上翻一屏

crtl+d:向下翻半屏

crtl+u:向上翻半屏

五、删除单个字符

#x 删除 光标所在处后面#个字符 x删除单个

六、删除命令:d

d命令和跳转命令组合使用 3dw

#dw, #de #db

dd: 删除当前光标所在行 3dd

#dd 删除包括当前光标所在行在内的#行

末行模式下:

starAdd,EndAdd . , +5 表示删除当前行到后面五行

支持相对表示法:

. 当前行

$ 最后行 $-3

+# 向下的#行

七、粘贴命令:p

删除的东西不会立即删除,删除的内容保存在缓冲区中

最后一次删除的内容 可以粘贴到指定地区 可以粘贴n次

小p: 如果删除或复制为整行,则粘贴至所在行的下方;非整行,则粘贴至所在行的下方

大P: 相反

八、复制命令 y

用法同d

九、先删除内容,再转换为输入模式

修改

c: 用法同d

十、替换单个字符

r

R 替换模式

十一、撤销编辑undo

u:撤销前一次操作 连续使用

只能在缓存中保存50次

3u 至倒数第三次

后悔撤销操作了,就有 Crtl+r 撤销的撤销 ,还原最近一次的撤销操作

类似于window下的crtl+z Crtl+y

十二、重复前一次编辑操作

点命令 .

十三、可视化操作

v:按字符选取

V: 矩形选取(整行选中)

十四、查找

/PATTERN 往后查找

?PATTERN 向前查找

n 下一个

N 上一个

十五、查找并替换

用法同set

在末行模式下使用s命令

startadd,endadd @ pattern @string @gi

: .,$-1 s/hello/HELLO @g

1,$ == % 表示全文

十六、使用vim打开多个文件

多个文件间复制粘贴

vim file1 file2 file3

:next 切换至前一个文件

:prev 切换至前一个文件

:last 切换至最后一个

:first切换至第一个文件

:qa 全部退出 q只能退出当前

十七、分屏显示一个文件 (word里面的窗口拆分)

Crtl+w,s :水平拆分窗口

Crtl+w,v :垂直拆分窗口

在窗口间切换

Crtl+w,APROW(方向键) 或者两次Crtl+w也能向下一个切换

:qa 关闭所有窗口

十八、分窗口多个文件

vim -o file1 file2 水平分割

vim -O file1 file2 垂直分割

切换 也是 crtl+w

十九、将当前文件中部分内容另存为另外一个文件

末行模式下使用w命令

:w

:addr1,addr2 w /path/to/somewhere

二十、将 另外一个文件的内容填充在当前文件中

:r /root/inittal

直接在后面添加另一个文件的内容

二十一、和shell交互

:!commen

然后回车后 会再返回到vi编辑界面

二十二、高级话题

1、显示或取消行号

:set nu

:set nonu

2.显示忽略或区分字符大小写 :set ignorecase

:set ic

: set noic

3.设定自动缩进 :set autoindent

写脚本编程的时候很重要

:set ai

:set noai

4、查找到的文本高亮显示 或者取消掉

:set hlsearch

:set nohlsearch

5.语法高亮

:syntax on

:syntax off

二十三、配置文件

/etc/vimrc

单用户家目录下 自己新建.vimrc

~/.vimrc

vim 进程强行被退出 网络断开的时候 经常会报错

vim -r inittab

file.swp 文件要手动删掉 备份文件 rm -f .inittab.swp

If this is the case, use “:recover>” or “vim -r inittab>”

to recover the changes (see “:help recovery>”).

If you did this already, delete the swap file “.inittab.swp>”

原文:http://www.cnblogs.com/manue1/p/4478330.html

vim: Vim 配置、插件和使用技巧

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

vim_cheat_sheet_for_programmers.png

常言道:工欲善其事,必先利其器 ,作为一个程序员,一个常用的工具就是 编辑器,我选择一个能极大提高自己开发效率的编辑器 vim(有些人可能选择 emacs)。而 vim编辑器方面具有以下几种特性:

  • 跨平台及统一环境无论是在windows还是在*nix,vim是一个很完美的跨平台文本编辑器,甚至可以直接在服务器平台CentOS,Ubuntu等直接配置使用,配置文件大同小异,操作习惯基本相同。

  • 定制化及可扩展

    vim提供一个 vimrc的配置文件来配置vim,并且自己可以定制一些插件来实现文件浏览( NERD Tree),代码补全( YouCompleteMe,语法检查( syntastic),文件模糊搜索( ctrlp),显示vim状态栏( Vim Powerline),主题颜色( Molokai),显示文件结构( tagbar)等多种功能。

  • 高效命令行使用vim编辑文本,只需在键盘上操作就可以,根本无需用到鼠标。就拿光标移动来说,与重复击键、一个字符一个字符或一行一行移动相比,按一次键就能以词、行、块或函数为单位移动,效率高得多。有时一些重复删除、粘帖的操作,也只需一条命令就可以完成,甚至你可以用键映射来简化或组合多种命令来提高效率。

配置

如果你需要配置vim,只需在Home目录创建一个 ~/.vimrc文件即可以配置vim了,可以参考我的 vimrc配置文件。由于我需要安装插件,并且将需要安装的插件列表分离到另外一个文件 ~/.vimrc.bundles,这个文件也是存放在Home目录,文件内容可以参考 vimrc.bundles。若想加载 ~/.vimrc.bundles文件,必须在 ~/.vimrc文件加入以下代码片段:

if filereadable(expand("~/.vimrc.bundles>"))
  source ~/.vimrc.bundles
endif 

插件

插件管理工具vunble

vundle是vim的插件管理工具,它能够搜索、安装、更新和移除vim插件,再也不需要手动管理vim插件。

  1. 在 Home目录创建 ~/.vim目录和 .vimrc文件(可复制我的 vimrc文件)
  2. 安装vundle

    git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 
  3. 在.vimrc配置文件中添加vundle支持
    filetype off
    set rtp+=~/.vim/bundle/vundle/
    call vundle#rc() 

    但实际上我是添加一个 ~/.vimrc.bundles文件来保存所有插件的配置,必须在 ~/.vimrc文件加入以下代码片段:

    if filereadable(expand("~/.vimrc.bundles>"))
    source ~/.vimrc.bundles
    endif 

    而 ~/.vimrc.bundles文件内容必须包含:

    filetype off
    set rtp+=~/.vim/bundle/vundle/
    call vundle#rc() 

    你可以复制到我 ~/.vimrc.bundles文件到 Home目录。

安装插件

bundle分为三类,比较常用就是 第二种:

  1. 在Github vim-scripts 用户下的repos,只需要写出repos名称
  2. 在Github其他用户下的repos, 需要写出”用户名/repos名”
  3. 不在Github上的插件,需要写出git全路径
vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

Bundle Type.png

将安装的插件在 ~/.vimrc配置,但是我是将插件配置信息放在 ~/.vimrc.bundles:

" Define bundles via Github repos
Bundle 'christoomey/vim-run-interactive'
Bundle 'Valloric/YouCompleteMe'
Bundle 'croaky/vim-colors-github'
Bundle 'danro/rename.vim'
Bundle 'majutsushi/tagbar'
Bundle 'kchmck/vim-coffee-script'
Bundle 'kien/ctrlp.vim'
Bundle 'pbrisbin/vim-mkdir'
Bundle 'scrooloose/syntastic'
Bundle 'slim-template/vim-slim'
Bundle 'thoughtbot/vim-rspec'
Bundle 'tpope/vim-bundler'
Bundle 'tpope/vim-endwise'
Bundle 'tpope/vim-fugitive'
Bundle 'tpope/vim-rails'
Bundle 'tpope/vim-surround'
Bundle 'vim-ruby/vim-ruby'
Bundle 'vim-scripts/ctags.vim'
Bundle 'vim-scripts/matchit.zip'
Bundle 'vim-scripts/tComment'
Bundle >"mattn/emmet-vim"
Bundle >"scrooloose/nerdtree"
Bundle >"Lokaltog/vim-powerline"
Bundle >"godlygeek/tabular"
Bundle >"msanders/snipmate.vim"
Bundle >"jelera/vim-javascript-syntax"
Bundle >"altercation/vim-colors-solarized"
Bundle >"othree/html5.vim"
Bundle >"xsbeats/vim-blade"
Bundle >"Raimondi/delimitMate"
Bundle >"groenewege/vim-less"
Bundle >"evanmiller/nginx-vim-syntax"
Bundle >"Lokaltog/vim-easymotion"
Bundle >"tomasr/molokai"
Bundle >"klen/python-mode" 

打开vim,运行 :BundleInstall或在shell中直接运行 vim +BundleInstall +qall

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

Install Bundle.png

常用插件

NERD Tree

NERD Tree是一个树形目录插件,方便浏览当前目录有哪些目录和文件。

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

NERD Tree Plugin Bundle.png

我在 ~/.vimrc文件中配置NERD Tree,设置一个启用或禁用 NERD Tree的键映射

nmap  :NERDTreeToggle

NERD Tree Configuration.png

所以你只需按 F5键就能启用或禁用 NERD Tree,NERD Tree提供一些常用快捷键来操作目录:

  • 通过 hjkl来移动光标
  • o打开关闭文件或目录,如果想打开文件,必须光标移动到文件名
  • t在标签页中打开
  • s和 i可以水平或纵向分割窗口打开文件
  • p到上层目录
  • P到根目录
  • K到同目录第一个节点
  • P到同目录最后一个节点

YouCompleteMe & syntastic

YouCompleteMe是一个快速、支持模糊匹配的vim代码补全引擎。由于它是基于 Clang引擎为C/C++/Objective-C提供代码提示,也支持其他语言代码提示的引擎,例如基于 Jedi的Python代码补全,基于 OmniSharp的C#代码补全,基于 Gocode的Go代码补全。

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

YouCompleteMe.gif

只需敲入代码,就自动提示想输入的代码列表,你可以选择其中一个,然后 tab键就可以补全代码。

YouCompleteMe已经集成了 Syntastic,所以一旦你编写代码时语法错误,就会有红色错误提示

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧
syntastic.png

ctrlp

不知道你有没有遇到这样一种情况:在大规模的工程项目中,目录和文件嵌套比较深,打开一个文件要逐个逐个进入目录才能打开,这样的话,比较耗时间和效率很低, ctrlp重新定义打目录和文件方式,特别适用于大规模项目文件的浏览。

启用ctrlp

  • 运行命令 :CtrlP:CtrlP [starting-directory]来以查找文件模式来启用 ctrlp
  • 运行命令 :CtrlPBuffer:CtrlPMRU来以查找缓冲或最近打开文件模式来启用 ctrlp
  • 运行命令 CtrlPMixed来查找文件、查找缓冲和最近打开文件混合模式来启动 ctrlp

基本使用

  • 在三种查找模式中互相切换
  • 来创建新文件和对应的父目录
  • 来切换到只查找文件名而不是全路径
  • 或箭头方向键来移动查找结果列表
  • 来以新标签或分割窗口的方式来打开文件
  • 来标识或取消标识文件,然后按 来打开文件
  • 来在提示历史中选择下一个/上一个字符串

演示视频

具体如何使用ctrlp,请参考happypetterd的 演示视频,讲解非常清楚。

Vim Powerline

Vim Powerline是一个显示vim状态栏插件,它能够显示vim模式、操作环境、编码格式、行数/列数等信息

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

Vim Powerline.png

Molokai

Molokai是vim颜色主题,效果如下

vim: Vim 配置、插件和使用技巧
vim: Vim 配置、插件和使用技巧

Molokai Color Scheme for Vim.png

常用命令

对于入门vim基本命令可以参考 简明 Vim 练级攻略,以下是本人关于 移动光标、 插入/修改、 删除、 复制、 粘帖、 撤销和恢复等常用命令

  • 移动光标

    1. 对于在 行内移动,通过使用 f/F + 字符来移动到特定的字符,然后再使用 .来重复执行命令; f表示向前移动, F表示向后移动。如果想直接移动到行首或行尾,使用 ^$
    2. 对于在 多行移动,就有多种选择: 第一种是通过 ggG行数 + G指定行数来移动, gg表示移动文件的第一行, G表示移动文件的最后一行, 行数 + G表示移动到特定的行。 第二种就是通过 正则搜索的方式来移动, /string表示正向查找, ?string表示反向查找, n查找下一个匹配的结果, N表示上一个匹配的结果,按 up/down可以浏览搜索历史。 第三种就是使用 标记来移动, m + {a-z}标记位置(适用于单个文件,如果是多个文件,使用大写字母 {A-Z}), `{mark}移动到标记位置的列, ‘{mark}移动到标记位置的行首,还有一些特殊的标记, 表示跳转前光标的位置
  • 选择文本

    v不规则选择

    V按行选择

    Ctrl + V按列选择

  • 插入/修改

    i在当前字符前面插入

    I在行首插入

    a在当前字符后面插入

    A在行尾插入

    o在当前行的下一行插入

    O在当前行的上一行插入

    r更改当前的字符

    R更改多个字符

    cw/caw更改单词

    cf + 字符更改从当前字符到指定字符

    c$更改从当前字符到行尾

    cc更改整行

  • 删除

    x删除字符

    df + 字符删除从当前字符到指定字符

    dw/daw删除单词

    d$删除从当前光标到行尾

    dd删除一行

  • 剪切与粘帖

    dd + pdelete一行,然后放在当前光标下方

    dd + Pdelete一行,然后放在当前光标上方

    dw + pdelete单词,然后放在当前光标后面

    dw + Pdelete单词,然后放在当前光标前面

    p/P可接受计数前缀,重复粘贴

  • 复制

    yw复制单词

    yf复制从当前字符到指定字符

    y$复制当前光标到行尾

    yy复制整行

  • 撤销和恢复

    u撤销

    ctrl + r重做

  • 重复操作

    数字+action表示执行某个操作多少次

    .重复上一个操作

  • 宏录制

    q + 寄存器(a-z)开始录制

    录制动作

    q停止录制

    @ + 寄存器 / @@replay被录制的宏

扩展阅读

原文:http://www.jianshu.com/p/a0b452f8f720

vim: Vim 对中文编码的支持

1、支持中文编码的基础

Vim要更好地支持中文编码需要两个特性:+multi_byte和+iconv,可以用 :version 命令检查当前使用的Vim是否支持,否则的话需要重新编译。

2、影响中文编码的设置项

Vim中有几个选项会影响对多字节编码的支持: encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。在Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文Windows环境下encoding的默认设置是cp936(GBK)。 fileencodings(fenc):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。 fileencoding(fencs) :Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。 termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。

3、Vim中的编码转换

Vim内部使用iconv库进行编码转换,如果这几个选项所设置的编码不一致,Vim就有可能会转换编码。打开已有文件时会从文件编码转换到encoding所设置的编码;保存文件时会从encoding设置的编码转换到fileencoding对应的编码。经常会看到Vim提示[已转换],这是表明Vim内部作了编码转换。终端环境下使用Vim,会从termencoding设置的编码转换到encoding设置的编码。 可以用|:help encoding-values|列出Vim支持的所有编码。

4、具体应用环境的设置

只编辑GBK编码的文件

set fileencodings=cp936
set fileencoding=cp936
set encoding=cp936
 

只编辑UTF-8编码的中文文件

set fileencodings=utf-8
set fileencoding=utf-8
set encoding=cp936 或者 set encoding=utf-8
 

同时支持GBK和UTF-8编码

set fileencodings=ucs-bom,utf-8,cp936
set fileencoding=utf-8
set encoding=cp936 或者 set encoding=utf-8
 

如果在终端环境下使用Vim,需要设置termencoding和终端所使用的编码一致。例如:

set termencoding=cp936 或者 set termencoding=utf-8

Windows记事本编辑UTF-8编码文件时会在文件头上加上三个字节的BOM:EFBBBF。如果fileencodings中设置ucs-bom的目的就是为了能够兼容用记事本编辑的文件,不需要的话可以去掉。Vim在保存UTF-8编码的文件时会去掉BOM。去掉BOM的最大好处是在Unix下能够使用cat a b>c来正确合并文件,这点经常被忽略。

5、FAQ

为什么在Vim中一次只能删除半个汉字?因为encoding设置错误,把encoding设置为cp936就可以解决此问题。在Unix环境下Vim会根据locale来设置默认的encoding,如果没有正确设置locale并且没有设置encoding就会一次只能删除半个汉字。

VIM为什么不能输入繁体字?把euc-cn或者GB2312改为cp936就可以了。euc-cn是GB2312的别名,不支持繁体汉字。cp936是GBK的别名,是GB2312的超集,可以支持繁体汉字。

VIM为什么提示不能转换?因为在编译Vim时没有加入iconv选项,重新编译Vim才能解决。

如何打开一个GBK编码的文件并另存为UTf-8编码? 保存文件时运行命令|:set fileencoding=utf-8|就可以了。

From : CSDN Blog

原文:http://apneng.net/2015/05/09/vim-chinese-language-support.html

vim: VIM查看文件编码、文件编码格式转换及文件名编码转换

如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。

Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。

下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。

查看文件编码

在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式。 如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在 ~/.vimrc 文件中添加以下内容:

set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
 

这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。

文件编码转换

  1. 在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式

    :set fileencoding=utf-8

  2. iconv 转换,iconv的命令格式如下:

    iconv -f encoding -t encoding inputfile 比如将一个UTF-8 编码的文件转换成GBK编码

    iconv -f GBK -t UTF-8 file1 -o file2

文件名编码转换:

从Linux往 windows拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。

在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。

首先看一下你的系统上是否安装了convmv,如果没安装的话用:

yum -y install convmv

安装。

下面看一下convmv的具体用法:

convmv -f 源编码 -t 新编码 [选项] 文件名

常用参数:

-r 递归处理子文件夹
--notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
--list 显示所有支持的编码
--unescap 可以做一下转义,比如把%20变成空格
 

比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:

convmv -f UTF-8 -t GBK --notest utf8编码的文件名

这样转换以后”utf8编码的文件名”会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)

Vim 编码方式的设置

和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。

Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:

  • encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).

  • fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。

  • fileencodings: Vim自动探测fileencoding的顺序列表, 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。

  • termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。

好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。

  1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。

  2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。

  3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。

  4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。

原文:http://apneng.net/2015/05/09/vim-file-encoding.html

vim: Vim常用命令手册

这两年工作基本都是用vim,用习惯发现到哪都离不开这玩意。
  • 退出编辑器
:w     将缓冲区写入文件,即保存修改
:wq     保存修改并退出
:x     保存修改并退出
:q     退出,如果对缓冲区进行过修改,则会提示
:q!     强制退出,放弃修改
--->
我个人比较喜欢的是:大写ZZ退出 
  • 查找替换
/pattern     向后搜索字符串pattern
?pattern     向前搜索字符串pattern
n     下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
N     上一个匹配(同上)
:%s/old/new/g     搜索整个文件,将所有的old替换为new
:%s/old/new/gc     搜索整个文件,将所有的old替换为new,每次都要你确认是否替换
--->
同时替换配合正则绝对是一个强大的删除命令: 
删除以#开头的:    s/^#.*$//g 
如果有些先以空格开头,并且顺便想删除换行驶符:  s/^[ ]*#.*n//g
删除空白行:  g/^$/d 
  • 复制粘贴
dd     删除光标所在行
dw     删除一个字(word)
x     删除当前字符
X     删除前一个字符
D     删除到行末
yy     复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行
yw     复制一个字
y$     复制到行末
p     粘贴粘贴板的内容到当前行的下面
P     粘贴粘贴板的内容到当前行的上面
]p     有缩进的粘贴,vim会自动调节代码的缩进
"a     将内容放入/存入a寄存器,可以支持多粘贴板
--->
复制粘贴配合可视化操作配合移动光标,绝壁是最人性化最舒服的复制好吗?
按v进入可视化,选定后按y,定位光标再p 
  • 移动光标
在vim中移动光标跟其他的编辑器中有很大的区别,不过一旦学会了,就会飞速的在文本中移动了。
h,j,k,l     上,下,左,右
ctrl-f     上翻一页
ctrl-b     下翻一页
%     跳到与当前括号匹配的括号处,如当前在{,则跳转到与之匹配的}处
w     跳到下一个字首,按标点或单词分割
W     跳到下一个字首,长跳,如end-of-line被认为是一个字
e     跳到下一个字尾
E     跳到下一个字尾,长跳
b     跳到上一个字
B     跳到上一个字,长跳
0     跳至行首,不管有无缩进,就是跳到第0个字符
^     跳至行首的第一个字符
$     跳至行尾
gg     跳至文件的第一行
gd     跳至当前光标所在的变量的声明处
[N]G     跳到第N行,如0G,就等价于gg,100G就是第100行
fx     在当前行中找x字符,找到了就跳转至
;     重复上一个f命令,而不用重复的输入fx
tx     与fx类似,但是只是跳转到x的前一个字符处
Fx     跟fx的方向相反
),(     跳转到上/下一个语句
*     查找光标所在处的单词,向下查找
#     查找光标所在处的单词,向上查找
`.     跳转至上次编辑位置
在屏幕上移动
H     移动光标到当前屏幕上最上边的一行
M     移动光标到当前屏幕上中间的一行
L     移动光标到当前屏幕上最下边的一行
--->
绝壁是vim的入门课 
  • 书签
ma     把当前位置存成标签a
`a     跳转到标签a处
  • 编辑
r     替换一个字符
J     将下一行和当前行连接为一行
cc     删除当前行并进入编辑模式
cw     删除当前字,并进入编辑模式
c$     擦除从当前位置至行末的内容,并进入编辑模式
s     删除当前字符并进入编辑模式
S     删除光标所在行并进入编辑模式
xp     交换当前字符和下一个字符
u     撤销
ctrl+r     重做
.     重复上一个编辑命令
~     切换大小写,当前字符
g~iw     切换当前字的大小写
gUiw     将当前字变成大写
guiw     将当前字变成小写
>>     将当前行右移一个单位
<<     将当前行左移一个单位(一个tab符)
==     自动缩进当前行
--->
在vim下,ctrl + v 可以进入列模式,
在gvim下, ctrl + q可进入列模式。
列模式对于我来说,干的最多的一件事就是注释大段的代码了。
ctrl + v,
放好列的位置,
按大写I,
输入#,
esc 
  • 插入模式
i     从当前光标处进入插入模式
I     进入插入模式,并置光标于行首
a     追加模式,置光标于当前光标之后
A     追加模式,置光标于行末
o     在当前行之下新加一行,并进入插入模式
O     在当前行之上新加一行,并进入插入模式
Esc     退出插入模式 
  • 可视模式
标记文本
v     进入可视模式,单字符模式
V     进入可视模式,行模式
ctrl+v     进入可视模式,列模式,类似于UE的列模式
o     跳转光标到选中块的另一个端点
U     将选中块中的内容转成大写
O     跳转光标到块的另一个端点
aw     选中一个字
ab     选中括号中的所有内容,包括括号本身
aB     选中{}括号中的所有内容
ib     选中括号中的内容,不含括号
iB     选中{}中的内容,不含{}
对标记进行动作
>     块右移
<     块左移
y     复制块
d     删除块
~     切换块中内容的大小写
 &#91;/code&#93;
<ul>
<li>
标签命令</li>
</ul>

:tabe fn     在一个新的标签页中编辑文件fn
gt     切换到下一个标签页
gT     切换到上一个标签页
:tabr     切换到第一个标签页
:tabl     切换到最后一个标签页
:tabm [N]     把当前tab移动到第N个tab之后 
  • 窗口命令
ctrl+w s     水平分割窗口
ctrl+w w     切换窗口
ctrl+w q     退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
ctrl+w v     垂直分割窗口 
  • 其他
vim在保存之前不会对文件做实际的修改,只是加载到缓冲区中,对文件的编辑其实是对缓冲区的编辑,直到:w时才会存入物理文件。
:e file     把file加载到新的缓冲区中
:bn     跳转到下一个缓冲区
:bd     删除缓冲区(关闭文件)
:sp fn     分割窗口,并将fn加载到新的窗口中 

原文:http://www.cnblogs.com/clor001/p/3876795.html

vim: Vim 自动补全插件 YouCompleteMe 安装与配置

概述

对于代码自动补全,之前一直使用的是Shougo/neocomplcache和Shougo/neosnippet。早就听说过YouCompleteMe的大名,一直想尝试一下YCM,但是还是拖到了现在。YCM和其它Vim插件的安装有些不同,可能需要折腾一下。之所以安装稍微会麻烦些,是因为YCM 后端调用 libclang(以获取AST,当然还有其他语言的语义分析库)、前端由 C++ 开发(以提升补全效率)、外层由 python 封装(以成为 vim 插件),它可能是安装最复杂的 vim 插件了。YCM是Client-sever架构的,Vim这部分的YCM只是很小的一个客户端,与具有大量逻辑和功能的ycmd HTTP+JSON交互。server在你开启或关闭Vim是自动开启或关闭。

其它自动补全的插件基本上是基于文本的,也就是说它们基本上是使用正则去猜。区别于其它Vim的自动补全插件,YCM基于语义引擎(比如C家族的libclang)提供了语义补全,是通过分析源文件,经过语法分析之后进行补全。对于C家族的语言这种基于语义的自动补全依赖于clang/llvm,其他语言 ,会调用vim设置的omnifunc来匹配,可以查看 github

YCM不是基于前缀补全的,而是子序列,所以输入 abc 可以补全 xaybgc,它对于大小写的补全也非常智能。对于C家族的语言和Python支持跳转到定义处。此外还可以对文件路径进行补全,和ultisnips也很好结合。

安装

完全安装

如果用Vundle更新YCM,yum_support_lib库API改变了,YCM会提醒你重新编译它。

  1. 确保Vim版本至少是7.3.584,并且支持python2脚本。

    在Vim中输入 :version可以查看版本。如果版本已经高于7.4了,那么OK。版本是7.3。那么继续往下看,看到 包含版本:1-Z,如果Z小于584就需要重装了。Ubuntu的话可以通过 PPA安装高版本的。否则就要从源码编译安装了。

    查看是否支持python2:进入vim,命令:echo has(‘python’),输出为1,则表示支持。如果为0,则需要重新编译安装vim,在编译时添加python支持。

  2. 通过Vundle安装YCM,在你的vimrc中添加 Plugin ‘Valloric/YouCompleteMe’,然后执行 :PluginInstall

  3. 如果不需要对C家族的语言进行语义补全支持,则跳过这一步。

    下载最新版的libclang。Clang是一个开源编译器,能够编译C/C++/Objective-C/Objective-C++。Clang提供的libclang库是用于驱动YCM对这些语言的语义补全支持。YCM需要版本至少为3.6的libclang,但是理论上3.2+版本也行。也可以使用系统libclang,如果确定是3.3版本或者更高。推荐下载
    官网的 二进制文件。确保选对适合自己系统的包。

  4. 编译YCM需要的ycm_support_libs库。YCM的C++引擎通过这些库来获取更快的补全速度。

    需要cmake,如果未安装,安装之: sudo apt-get install build-essential cmake(也可以下载安装 http://www.cmake.org/cmake/resources/software.html)。确保python头文件已安装: sudo apt-get install python-dev。假设你已经通过Vundle装好YCM了,那么它应该位于 ~/.vim/bundle/YouCompleteMe。我们新建一个目录用来放置编译文件,并切换到此目录下 cd ~;mkdir ycm_build;cd ycm_build;

    下一步生成makefile,这一步很重要,有点复杂。

    • 如果不需要C族语言的语义支持,在ycm_build目录下执行: cmake -G “Unix Makefiles>” . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
    • 如果需要C族语言的语义支持,还得分几种情况:

      • 假如你从llvm的官网下载了LLVM+Clang,然后解压到:~/ycm_temp/llvm_root_dir (该目录下有 bin, lib, include 等文件夹),然后执行: cmake -G “Unix Makefiles>” -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
      • 如果想用系统的libclang: cmake -G “Unix Makefiles>” -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
      • 如果想用自定义的libclang: cmake -G “Unix Makefiles>” -DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp。/path/to/libclang.so这部分填入你自己的路径。
        >
        makefiles生成后执行: make ycm_support_libs

我是从llvm网站下载的二进制文件,安装的,安装过程中也没遇到什么问题。

Ubuntu Linux X64 超快安装

最好还是完整安装,这种快速安装未必适合所有人。安装之前,同样也要确定满足以上所述的vim版本、python支持等条件。和上面一样使用Vundle安装YCM,安装CMake和python头文件。

编译YCM,如果需要对C-family的语义支持:

cd
~/. vim
/bundle/YouCompleteMe

./install. sh
--clang-completer

如果不需要对C-family的语义支持:

cd
~/. vim
/bundle/YouCompleteMe

./install. sh

如果需要支持C#,添加 --omnisharp-complete。如果需要支持Go添加 --gocode-completer

配置

YCM使用TAB键接受补全,一直按TAB则会循环所有的匹配补全项。shift+TAB则会反向循环。注意:如果使用控制台Vim(非GVim或MacVim等),控制台不会将shift+Tab传递给Vim,因此会无反应,需要重新映射按键。此外,如果同时使用ultisnaps,可能会有冲突,需要进行一些设置。可以使用Ctrl+Space来触发补全,不过会和输入法冲突,也需要设置。

YCM会寻找当前打开的文件的同级目录下或上级目录中的 ycm_extra_conf.py这个文件,找到后会加载为Python模块,且只加载一次。YCM调用该模块中的FlagsForFile方法。该模块必须提供带有编译当前文件的必要信息的这个方法。需要修改 .ycm_extra_conf.py文件中的flags部分,使用-isystem添加系统的头文件进行解析,使用-I添加第三方的头文件进行解析,在flags部分后添加如下内容:

'-isystem'
,

'/usr/include'
,

使用命令 :YcmDiags可以打开location-list查看警告和错误信息。

set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)

autocmd InsertLeave * if pumvisible() == 0|pclose|endif >"离开插入模式后自动关闭预览窗口

inoremap pumvisible() ? ">"
: ">"
"回车即选中当前项

>"上下左右键的行为 会显示其他信息

inoremap pumvisible() ? ">"
: ">"

inoremap pumvisible() ? ">"
: ">"

inoremap pumvisible() ? ">"
: ">"

inoremap pumvisible() ? ">"
: ">"

" 跳转到定义处

nnoremap jd :YcmCompleter GoToDefinitionElseDeclaration

nnoremap :YcmForceCompileAndDiagnostics >"force recomile with
syntastic

" nnoremap lo :lopen >"
open locationlist

" nnoremap lc :lclose >"
close locationlist

inoremap

let
g
:ycm_global_ycm_extra_conf = '~/.vim/data/ycm/.ycm_extra_conf.py'

" 不显示开启vim时检查ycm_extra_conf文件的信息

let g:ycm_confirm_extra_conf=0

>" 开启基于tag的补全,可以在这之后添加需要的标签路径

let
g
:ycm_collect_identifiers_from_tags_files= 1

"注释和字符串中的文字也会被收入补全

let g:ycm_collect_identifiers_from_comments_and_strings = 0

>" 输入第 2
个字符开始补全

let
g
:ycm_min_num_of_chars_for_completion= 2

" 禁止缓存匹配项,每次都重新生成匹配项

let g:ycm_cache_omnifunc=0

>" 开启语义补全

let
g
:ycm_seed_identifiers_with_syntax= 1

"在注释输入中也能补全

let g:ycm_complete_in_comments = 1

>"在字符串输入中也能补全

let
g
:ycm_complete_in_strings = 1

" 设置在下面几种格式的文件上屏蔽ycm

let g:ycm_filetype_blacklist = {

'tagbar' : 1,

'nerdtree' : 1,

}

>"youcompleteme 默认tab s-tab 和 ultisnips 冲突

let
g
:ycm_key_list_select_completion = [ ''
]

let
g
:ycm_key_list_previous_completion = [ ''
]

" 修改对C函数的补全快捷键,默认是CTRL + space,修改为ALT + ;

let g:ycm_key_invoke_completion = ''

>" SirVer/ultisnips 代码片断

" Trigger configuration. Do not use if you use https://github.com/Valloric/YouCompleteMe.

let g:UltiSnipsExpandTrigger=>" "

let g:UltiSnipsJumpForwardTrigger=>" "

let g:UltiSnipsJumpBackwardTrigger=>" "

let g:UltiSnipsListSnippets=>" "

>"定义存放代码片段的文件夹,使用自定义和默认的,将会的到全局,有冲突的会提示

let
g
:UltiSnipsSnippetDirectories=[ "bundle/vim-snippets/UltiSnips>"
]

" 参考https://github.com/Valloric/YouCompleteMe/issues/36#issuecomment-62941322

>" 解决ultisnips和ycm tab冲突,如果不使用下面的办法解决可以参考

" https://github.com/Valloric/YouCompleteMe/issues/36#issuecomment-63205056的配置

>" begin

" let g:ycm_key_list_select_completion=['', '']

>" let
g
:ycm_key_list_previous_completion=[ ''
, ''
]

" let g:UltiSnipsExpandTrigger=>"
"

>" let
g
:UltiSnipsJumpForwardTrigger= ">"

" let g:UltiSnipsJumpBackwardTrigger=>"
"

>" end

" UltiSnips completion function that tries to expand a snippet. If there's no

>" snippet for
expanding, it checks for
completion window
and
if
it 's

" shown, selects first element. If there's no
completion window
it tries to

>" jump to next placeholder. If there's no placeholder it just returns TAB key

function! g:UltiSnips_Complete()

call UltiSnips#ExpandSnippet()

if g:ulti_expand_res == 0

if pumvisible()

return " >"

else

call UltiSnips#JumpForwards()

if g:ulti_jump_forwards_res == 0

return " >"

endif

endif

endif

return " >"

endfunction

au BufEnter * exec "inoremap >" . g:UltiSnipsExpandTrigger . "
= g
:UltiSnips_Complete() >"

" Expand snippet or
return

let
g
:ulti_expand_res = 1

function
! Ulti_ExpandOrEnter()

call UltiSnips #ExpandSnippet()

if
g
:ulti_expand_res

return
''

else

return
>""

endfunction

>" Set as primary trigger

inoremap =Ulti_ExpandOrEnter()

YCM & Eclim

YCM配合Eclim可以实现对Java代码的自动提示,首先需要下载 Eclim,下载好后执行 java -jar eclim_2.4.1.jar,卸载的话,后面再加个参数 uninstaller就行。按提示一步步安装就好了,安装好后首先要启动eclimd,它存放在eclipse的根目录下。

对不同的自动补全插件eclim都提供了 配置方法,对于YCM我们只需要在vimrc中添加一行 let g:EclimCompletionMethod = 'omnifunc'就可以了。

打开vim执行 :ProjectCreate /path/to/project -n java创建一个新的工程。这个工程的结构和eclipse类似。 :ProjectList命令可以查看工程列表。

这个插件很有意思,可以在eclipse中嵌入vim,又可以在vim中享受eclipse一样的自动补全。对于Java来说,提供了一些以 JavaProjectNewMvn为前缀的命名。可以输入 :Java按Tab键尝试一下。不过,我觉得还是使用eclipse配合viPlugin插件更方便些。

参考:

原文:http://howiefh.github.io/2015/05/22/vim-install-youcompleteme-plugin/

vim: 静静地,做个vim装13党

虽然敲了好几年代码才接触到vim;

虽然有了sublime text和vsCode;

虽然还没接触到mac里的神(niu)马(bi)编辑器;

但是,这一刻

请让我

静静地,做个vim装13党

于是,我在vs2012里安装了vsvim插件。

遇见

在某个秋天,知道了cs50,看了几节David的课程,发现他貌似敲命令和写代码都是在一个黑乎乎的界面完成,然后网页就刷刷刷的变了,真是好奇!于是,baidu+google的一顿翻,原来是个叫 vim的东西在作怪。

发展

遇见了vim,作为一只爱鼓捣的金刚猪(程序员),当然要各种办法试用一下。于是,从window到ubuntu,从cygwin到gvim到内置的vim,从 vi tutor的毛手毛脚到逐渐记住了 iwq,勉强在vim的世界活了下来。 但是一直还是偶尔隔几个月想起来敲一下而已,学习进度缓慢。直到遇见了 实验楼,又稍微认真的学习了两天后,终于多记住了几个按键的作用。特别是发现了下面这张图并把它作为桌面后,事情就越来越好玩了。

vim: 静静地,做个vim装13党
vim: 静静地,做个vim装13党

选择

学习vim时候,在搜索过程中不可避免的遇见vim的老相好,另一款最好的编辑器 Emacs,他们都是最好的,嘿嘿我不较真,详细 点这里

但是吧,人总是会作出最适合自己的选择,虽然我的同步盘里一直也放着Emacs,对各种组合键也是很喜欢,但是在与工作相结合的时候,也就是考虑怎么在vs里玩这种靠键盘写代码的工具时候,vim无疑是我最好的选择,单独的按键功能,配合vs自带的各种组合键。我就可以开心的在代码里遨游了。

继续

虽然用vim前前后后加起来快3年,但是很多功能还是几乎没用过的,我还是会继续学习的,恰好的是,最近网上有个很不错的帖子,把各种高级的用法图都贴了出来。于是,就保存起来好好学习了。主要学习这个图的。

vim: 静静地,做个vim装13党
vim: 静静地,做个vim装13党

具体帖子地址是 史上最全Vim快捷键键位图 — 入门到进阶.

说到底,在vim的世界里,我还只是个孩子。

请大牛们多多指教!

原文:http://www.ituring.com.cn/article/198444

vim: Mac 下配置 Vim 代码补全:YouCompleteMe

引言

Vim 无疑是世界上最好用的编辑器之一(为了不引起战争 →_→)。在广大程序员用 Vim 敲代码的过程中,代码补全功能能够大大提高生产力,尤其是对于从各种 IDE 转到 Vim 的程序员来说更是福音般地存在。本文将介绍一种推荐的代码补全工具 YouCompleteMe,并且一步步介绍它的安装方式。

YouCompleteMe

YouCompleteMe
是一个比较完备,并且正在日渐完备的 Vim 代码补全插件。它的功能十分强大,支持自动补全的语言包括:

  • C/C++/Objective-C/Objective-C++ (基于 Clang
    )
  • Python (基于 Jedi
    )
  • C# (基于 OmniSharp
    )
  • Go (基于 GoCode
    )
  • 其他 Vim 的 omnicomplete system 支持的语言,比如 (Ruby, PHP 等)

先上一张作者给的 demo 效果图。

vim: Mac 下配置 Vim 代码补全:YouCompleteMe
vim: Mac 下配置 Vim 代码补全:YouCompleteMe

安装

接下来介绍安装过程。

确定 Vim 版本满足支持

如果你用的是 Mac OS X 自带的 vim 的话,那么肯定是不能满足需求的。首先,需要升级 vim。这里建议安装 macvim
,当然 vim 的 官网
也是这么推荐的。推荐使用 brew
来安装。

  1. MacVim 依赖 Xcode,首先需要在 App Store 中安装 Xcode。如果是全新安装的 Xcode,请打开一次,并且同意 license。
  2. 使用 brew 安装 MacVim

    bashbrew install macvim
    
  3. 使用 MacVim 替换系统自带的 Vim,在当前 shell 的配置文件中添加

    bashalias vim='mvim -v'
    

安装 Vundle

Vundle (缩写自 Vim bundle) 是一个很方便的 Vim 插件管理器。它的使用方法很简单,安装一个插件只需要在 .vimrc按照规则中添加 Plugin 的名称,某些需要添加路径,之后在 Vim 中使用 :PluginInstall既可以自动化安装。具体的使用过方法详见 官网

下面将介绍 Vundle 的安装及基本配置。

  1. 使用 git 克隆 Vundle 工程到本地。

    bash
    git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
     
  2. 修改
    .vimrc
    配置 Plugins。在
    .vimrc
    文件中添加如下内容。

    set nocompatible
    filetype off
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    Plugin 'gmarik/Vundle.vim'
    call vundle#end()
    filetype plugin indent on
     

安装 YouCompleteMe

接下来将要安装的是我们的主角,YouCompleteMe。解决了上面的依赖软件之后,安装它将变得非常简单。


  1. .vimrc
    中添加如下内容。位置在
    call vundle#begin()

    call vundle#end()
    之间。

    Bundle 'Valloric/YouCompleteMe'
    
  2. 编译 YouCompleteMe

    首先说明,编译过程需要
    CMake
    ,可以使用
    brew
    来安装。

    bash
    brew install CMake
    
    • 带 C-family languages 语义支持的版本
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --clang-completer
     
    • 不带 C-family languages 语义支持的版本
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --clang-completer
     
    • 带 C# 语义支持的版本
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --omnisharp-completer
     
    • 带 Go 语言语义支持的版本
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --gocode-completer
     

完成

至此,我们已经拥有了 YouCompleteMe 这款自动补全神器。请尽情享用。

Just enjoy it !

原文:http://segmentfault.com/a/1190000002793897

vim: 玩转VIM-札记(三)

玩转VIM-札记(三)

眨眼之间,5月就要从指间溜走,不给人一点点遐想的时间,我要赶紧抓着五月的尾巴,在博客中在添一笔。那么就还接着Vim来说吧。以Vim来为五月画上一个句号。

返璞归真

相信经过玩转Vim-札记(一)和玩转Vim-札记(二)的学习,对于光标的移动已经能做到随心所欲了,但是如果想要更快速的操作,以下几个光标移动的命令也是必不可少的。

在当前行上移动光标:  0^$fFtT,;

  • 0 → 到行头
  • ^ → 到本行的第一个非blank字符
  • $ → 到行尾
  • g_ → 到本行最后一个不是blank字符的位置。
  • fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
  • t, → 到逗号前的第一个字符。逗号可以变成其它字符。
  • 3fa → 在当前行查找第三个出现的a。
  • F 和  T → 和  f 和  t 一样,只不过是相反方向。

区域选择  a或  i

在visual 模式下,这些命令很强大,其命令格式为

a和  i

  • action可以是任何的命令,如  d (删除),  y (拷贝),  v (可以视模式选择)。
  • object 可能是:  w 一个单词,  W 一个以空格为分隔的单词,  s 一个句字,  p 一个段落。也可以是一个特别的字符: "、  ‘、  )、  }、  ]。

假设你有一个字符串  (map (+) (“foo>”)).而光标键在第一个  的位置。

  • vi” → 会选择  foo.
  • va>” → 会选择  “foo>”.
  • vi) → 会选择  “foo>”.
  • va) → 会选择 (“foo>”).
  • v2i) → 会选择  map (+) (“foo>”)
  • v2a) → 会选择  (map (+) (“foo>”))

块操作: 

块操作,典型的操作:  0 I– [ESC]

  • ^ → 到行头
  •  → 开始块操作
  •  → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
  • I– [ESC] → I是插入,插入“ ”,按ESC键来为每一行生效。

在Windows下的vim,你需要使用  而不是  是拷贝剪贴板。

自动提示:   和 

在 Insert 模式下,你可以输入一个词的开头,然后按  或是,自动补齐功能就出现了……

宏录制:  qa 操作序列  q@a@@

  • qa 把你的操作记录在寄存器  a。
  • 于是  @a 会replay被录制的宏。
  • @@ 是一个快捷键用来replay最新录制的宏。
  • 示例

    在一个只有一行且这一行只有“1”的文本中,键入如下命令:

    • qaYpq@a → 在1下面写下 2
      • qa 开始录制
      • Yp 复制行.
      •  增加1.
      • q 停止录制.
    • @@ → 在2 正面写下3
    • 现在做  100@@ 会创建新的100行,并把数据增加到 103.

可视化选择:  v, V,

前面,我们看到了  的示例 (在Windows下应该是),我们可以使用  v和  V。一但被选好了,你可以做下面的事:

  • J → 把所有的行连接起来(变成一行)
  • < 或  > → 左右缩进
  • = → 自动给缩进 

在所有被选择的行后加上点东西:

  • 选中相关的行 (可使用  j 或   或是  /pattern 或是  % 等……)
  • $ 到行最后
  • A, 输入字符串,按  ESC。

分屏:  :split 和  vsplit

下面是主要的命令,你可以使用VIM的帮助  :help split. 你可以参考陈皓以前的一篇文章 VIM分屏

  • :split → 创建分屏 ( :vsplit创建垂直分屏)
  •  : dir就是方向,可以是  hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。
  • _ (或  |) : 最大化尺寸 (| 垂直分屏)
  • + (或  ) : 增加尺寸

参考:http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/

PS:本博客欢迎转发,但请注明博客地址及作者,因本人水平有限,若有不对之处,欢迎指出,谢谢~

博客地址: http://www.cnblogs.com/voidy/

博客新址: http://voidy.net

<。)#)))≦

原文:http://www.cnblogs.com/voidy/p/4541530.html

vim: Vim配置、插件和使用技巧

vim_cheat_sheet_for_programmers.png

常言道:工欲善其事,必先利其器 ,作为一个程序员,一个常用的工具就是 编辑器,我选择一个能极大提高自己开发效率的编辑器 vim(有些人可能选择 emacs)。而 vim编辑器方面具有以下几种特性:

  • 跨平台及统一环境无论是在windows还是在*nix,vim是一个很完美的跨平台文本编辑器,甚至可以直接在服务器平台CentOS,Ubuntu等直接配置使用,配置文件大同小异,操作习惯基本相同。

  • 定制化及可扩展

    vim提供一个 vimrc的配置文件来配置vim,并且自己可以定制一些插件来实现文件浏览( NERD Tree),代码补全( YouCompleteMe,语法检查( syntastic),文件模糊搜索( ctrlp),显示vim状态栏( Vim Powerline),主题颜色( Molokai),显示文件结构( tagbar)等多种功能。

  • 高效命令行使用vim编辑文本,只需在键盘上操作就可以,根本无需用到鼠标。就拿光标移动来说,与重复击键、一个字符一个字符或一行一行移动相比,按一次键就能以词、行、块或函数为单位移动,效率高得多。有时一些重复删除、粘帖的操作,也只需一条命令就可以完成,甚至你可以用键映射来简化或组合多种命令来提高效率。

配置

如果你需要配置vim,只需在Home目录创建一个 ~/.vimrc文件即可以配置vim了,可以参考我的 vimrc配置文件。由于我需要安装插件,并且将需要安装的插件列表分离到另外一个文件 ~/.vimrc.bundles,这个文件也是存放在Home目录,文件内容可以参考 vimrc.bundles。若想加载 ~/.vimrc.bundles文件,必须在 ~/.vimrc文件加入以下代码片段:

if filereadable(expand("~/.vimrc.bundles>"))   source ~/.vimrc.bundles endif 

插件

插件管理工具vunble

vundle是vim的插件管理工具,它能够搜索、安装、更新和移除vim插件,再也不需要手动管理vim插件。

  1. 在 Home目录创建 ~/.vim目录和 .vimrc文件(可复制我的 vimrc文件)
  2. 安装vundle

    git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 
  3. 在.vimrc配置文件中添加vundle支持

    filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() 

    但实际上我是添加一个 ~/.vimrc.bundles文件来保存所有插件的配置,必须在 ~/.vimrc文件加入以下代码片段:

    if filereadable(expand("~/.vimrc.bundles>")) source ~/.vimrc.bundles endif 

    而 ~/.vimrc.bundles文件内容必须包含:

    filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() 

    你可以复制到我
    ~/.vimrc.bundles
    文件到 Home目录。

安装插件

bundle分为三类,比较常用就是 第二种:

  1. 在Github vim-scripts 用户下的repos,只需要写出repos名称
  2. 在Github其他用户下的repos, 需要写出”用户名/repos名”
  3. 不在Github上的插件,需要写出git全路径

Bundle Type.png

将安装的插件在 ~/.vimrc配置,但是我是将插件配置信息放在 ~/.vimrc.bundles:

" Define bundles via Github repos Bundle 'christoomey/vim-run-interactive' Bundle 'Valloric/YouCompleteMe' Bundle 'croaky/vim-colors-github' Bundle 'danro/rename.vim' Bundle 'majutsushi/tagbar' Bundle 'kchmck/vim-coffee-script' Bundle 'kien/ctrlp.vim' Bundle 'pbrisbin/vim-mkdir' Bundle 'scrooloose/syntastic' Bundle 'slim-template/vim-slim' Bundle 'thoughtbot/vim-rspec' Bundle 'tpope/vim-bundler' Bundle 'tpope/vim-endwise' Bundle 'tpope/vim-fugitive' Bundle 'tpope/vim-rails' Bundle 'tpope/vim-surround' Bundle 'vim-ruby/vim-ruby' Bundle 'vim-scripts/ctags.vim' Bundle 'vim-scripts/matchit.zip' Bundle 'vim-scripts/tComment' Bundle >"mattn/emmet-vim" Bundle >"scrooloose/nerdtree" Bundle >"Lokaltog/vim-powerline" Bundle >"godlygeek/tabular" Bundle >"msanders/snipmate.vim" Bundle >"jelera/vim-javascript-syntax" Bundle >"altercation/vim-colors-solarized" Bundle >"othree/html5.vim" Bundle >"xsbeats/vim-blade" Bundle >"Raimondi/delimitMate" Bundle >"groenewege/vim-less" Bundle >"evanmiller/nginx-vim-syntax" Bundle >"Lokaltog/vim-easymotion" Bundle >"tomasr/molokai" Bundle >"klen/python-mode&quot; 

打开vim,运行 :BundleInstall
或在shell中直接运行 vim +BundleInstall +qall

Install Bundle.png

常用插件

NERD Tree

NERD Tree是一个树形目录插件,方便浏览当前目录有哪些目录和文件。

NERD Tree Plugin Bundle.png

我在 ~/.vimrc文件中配置NERD Tree,设置一个启用或禁用 NERD Tree的键映射

nmap <f5> :NERDTreeToggle<cr> 

NERD Tree Configuration.png

所以你只需按 F5键就能启用或禁用 NERD Tree,NERD Tree提供一些常用快捷键来操作目录:

  • 通过 hjkl来移动光标
  • o打开关闭文件或目录,如果想打开文件,必须光标移动到文件名
  • t在标签页中打开
  • s和 i可以水平或纵向分割窗口打开文件
  • p到上层目录
  • P到根目录
  • K到同目录第一个节点
  • P到同目录最后一个节点

YouCompleteMe & syntastic

YouCompleteMe是一个快速、支持模糊匹配的vim代码补全引擎。由于它是基于 Clang引擎为C/C++/Objective-C提供代码提示,也支持其他语言代码提示的引擎,例如基于 Jedi的Python代码补全,基于 OmniSharp的C#代码补全,基于 Gocode的Go代码补全。

YouCompleteMe.gif

只需敲入代码,就自动提示想输入的代码列表,你可以选择其中一个,然后 tab键就可以补全代码。

YouCompleteMe已经集成了 Syntastic,所以一旦你编写代码时语法错误,就会有红色错误提示

syntastic.png

ctrlp

不知道你有没有遇到这样一种情况:在大规模的工程项目中,目录和文件嵌套比较深,打开一个文件要逐个逐个进入目录才能打开,这样的话,比较耗时间和效率很低, ctrlp重新定义打目录和文件方式,特别适用于大规模项目文件的浏览。

启用ctrlp

  • 运行命令 :CtrlP
    :CtrlP [starting-directory]
    来以查找文件模式来启用 ctrlp
  • 运行命令 :CtrlPBuffer
    :CtrlPMRU
    来以查找缓冲或最近打开文件模式来启用 ctrlp
  • 运行命令 CtrlPMixed
    来查找文件、查找缓冲和最近打开文件混合模式来启动 ctrlp

基本使用



  • 在三种查找模式中互相切换

  • 来创建新文件和对应的父目录

  • 来切换到只查找文件名而不是全路径


  • 或箭头方向键来移动查找结果列表



  • 来以新标签或分割窗口的方式来打开文件

  • 来标识或取消标识文件,然后按
    来打开文件


  • 来在提示历史中选择下一个/上一个字符串

演示视频

具体如何使用ctrlp,请参考happypetterd的

演示视频

,讲解非常清楚。

Vim Powerline

Vim Powerline是一个显示vim状态栏插件,它能够显示vim模式、操作环境、编码格式、行数/列数等信息

Vim Powerline.png

Molokai

Molokai是vim颜色主题,效果如下

Molokai Color Scheme for Vim.png

常用命令

对于入门vim基本命令可以参考简明 Vim 练级攻略,以下是本人关于 移动光标、 插入/修改、 删除、 复制、 粘帖、 撤销和恢复等常用命令

  • 移动光标

    1. 对于在 行内移动,通过使用 f/F + 字符
      来移动到特定的字符,然后再使用 .
      来重复执行命令; f
      表示向前移动, F
      表示向后移动。如果想直接移动到行首或行尾,使用 ^
      $
    2. 对于在 多行移动,就有多种选择: 第一种是通过 gg
      G
      行数 + G
      指定行数来移动, gg
      表示移动文件的第一行, G
      表示移动文件的最后一行, 行数 + G
      表示移动到特定的行。 第二种就是通过 正则搜索的方式来移动, /string
      表示正向查找, ?string
      表示反向查找, n
      查找下一个匹配的结果, N
      表示上一个匹配的结果,按 up/down
      可以浏览搜索历史。 第三种就是使用 标记来移动, m + {a-z}
      标记位置(适用于单个文件,如果是多个文件,使用大写字母 {A-Z}
      ), `{mark}
      移动到标记位置的列, '{mark}
      移动到标记位置的行首,还有一些特殊的标记, '
      表示跳转前光标的位置
  • 选择文本

    v
    不规则选择

    V
    按行选择

    Ctrl + V
    按列选择

  • 插入/修改

    i
    在当前字符前面插入

    I
    在行首插入

    a
    在当前字符后面插入

    A
    在行尾插入

    o
    在当前行的下一行插入

    O
    在当前行的上一行插入

    r
    更改当前的字符

    R
    更改多个字符

    cw/caw
    更改单词

    cf + 字符
    更改从当前字符到指定字符

    c$
    更改从当前字符到行尾

    cc
    更改整行

  • 删除

    x
    删除字符

    df + 字符
    删除从当前字符到指定字符

    dw/daw
    删除单词

    d$
    删除从当前光标到行尾

    dd
    删除一行

  • 剪切与粘帖

    dd + p
    delete一行,然后放在当前光标下方

    dd + P
    delete一行,然后放在当前光标上方

    dw + p
    delete单词,然后放在当前光标后面

    dw + P
    delete单词,然后放在当前光标前面

    p/P
    可接受计数前缀,重复粘贴

  • 复制

    yw
    复制单词

    yf
    复制从当前字符到指定字符

    y$
    复制当前光标到行尾

    yy
    复制整行

  • 撤销和恢复

    u
    撤销

    ctrl + r
    重做

  • 重复操作

    数字+action
    表示执行某个操作多少次

    .
    重复上一个操作

  • 宏录制

    q + 寄存器(a-z)
    开始录制

    录制动作
    >

    q
    停止录制

    @ + 寄存器 / @@replay被录制的宏

扩展阅读

原文:http://www.kuqin.com/shuoit/20150606/346467.html

vim: Vim – 适合自己的,才是最好的

Vim 被称为编辑器之神,是我用过之后才体会到的,用之前实在不敢对它做出什么评价。在大学时代,Vim 的大名就已如雷贯耳,但由于它陡峭的学习曲线,一直望而却步。等真正开始学习之后,发现并没有想象中的复杂,也没有所谓的瓶颈,只要在实际写代码中强迫自己使用就可以了,无形中就会形成习惯。最初的不适,换来的是效率的飞升。这和我当初学习双拼的感觉一样。下图是我的 Vim 界面:

vim: Vim - 适合自己的,才是最好的
vim: Vim – 适合自己的,才是最好的

学习方式

我一开始也是看了很多教程,这里我就不说具体的学习方法了,因为 Google 上一搜一大堆。

我只想谈一点:很多「过来人」告诫新手,一开始使用 Vim 一定不能使用插件, 要从最纯净的 Vim 开始练习。他们认为一上手就使用别人的配置,很容易被别人影响,不能领会到自己配置 Vim,这种从无到有的感觉。虽然我也很喜欢折腾的感觉,但这对于学习、入门一个工具来说有点 南辕北辙,我们学习一个工具就是为了用好它,或者 用它来为我们服务。为什么要我们去适应它呢?也许这不符合 Vim 的哲学,但是我觉得:

  • Vim 存在这么多年,已经有很多优秀的 Vim 配置(比如: spf13-vim),可以为我们节省很多折腾的时间。不过如果你非常喜欢折(zuo)腾(si),那也可以从头开始。
  • 对于新手来说,自己的配置总是很不成熟,到头来还是得参考一些高手的配置。索性一开始用他们的,慢慢删改。
  • 从纯净版开始你会觉得很枯燥,Vim 远没别人口中、视频中所述的酷炫,效率不升反降。这很容易丧失进阶的兴趣。
  • 天下武功,唯快不破,这个时代求快。我不否认先夯实基础,再层层递进的学习方式,但针对不同的学习对象,不同的环境背景,我们还是应该采取最快、最有效的学习方式。

如果你学习 Vim 是为了体验学习的新鲜感,或者业余玩味,请忽略我上面的话。但如果你的最终目的是为了在实际中用到它,提升我们的工作效率,那你不妨和我一样,直接拉别人的配置下来,在 Shell 里输入 Vim 启动,开始写代码!

当时我找到了 k-vim,按照他的安装步骤,很简单就把 Vim 配置好了,启动 Vim,发现界面也很漂亮,嗯,这就是我要的效果。接着,我打开自己那两天正在写的项目,通过仅会的四个快捷键 HJKL移动光标来查看文件。然后我仔细阅读了 k-vim的 README 文件,把它提到的几个快捷键试了试,感觉很不错。接下来的几天,它的 README 网页我一直开着,遇到想要的快捷键一搜就搞定,虽然写代码的效率确实下降了很多,但对编辑器的使用越来越纯熟。一周之后我已经习惯用 Vim 来编程了。

接下来开始进一步研究 Vim,理解 Vim 的 三种模式(正常模式、命令模式、视图模式),然后掌握如何配置 插件和 快捷键就OK了。最关键一点就是要实战,强迫自己所有的操作只用键盘,强迫只用 Vim 作编辑器。

插件与快捷键

Vim 的插件可以通过 Vundle来管理。(据说 vim-plug也挺好用)

只需两步:

  • vimrc.bundles文件中配置你想要的插件
  • 在 Vim 的命令模式中输入 :BundleInstall

其他的命令有:

:BundleUpdate    //更新插件
:BundleClean     //删除插件
 

个人觉得必备的插件:

  • syntastic 多语言语法检查
  • YouCompleteMe 代码自动补全
  • ctrlp.vim 文件搜索,类似 Sublime Text 里面的 Cmd + P
  • vim-airline 状态栏增强
  • nerdtree目录树
  • vim-ctrlspace tab/buffer导航增强

而快捷键的学习方法,就是用到的时候去 Google,多用几次就记住了。如果它自带的快捷键用着不舒服,你完全可以自己重设,Vim 就是自由,不必拘泥条条框框。

哲学

非常推荐阅读 Stack Overflow 上的这篇回答:

What is your most productive shortcut with Vim?

这篇真正阐述了 Vim 作者当初设计 Vim 快捷键时的哲学,看懂这篇对 Vim 快捷键的掌握会更上一层。

感悟

在学习 Vim、使用 Vim 的过程中,我最大的感悟就是 「适合自己的,才是最好的」。

很多插件看起来很酷炫,快捷键几下就能实现很繁杂的操作,但是你不一定会有使用这个插件的需求,或者即使用也用的不多。有人总喜欢拿 IDE 和 Vim 比,我觉得这根本没有比较的必要,你两个都用也没什么问题。大的项目,复杂的文件结构和引用,你不用 IDE 而用 Vim,是浪费时间。而且一般 IDE 都提供了 Vim 模式,你仍可以在 IDE 中继续击键如飞。

用 Vim 体验的是一种 轻便、自由、可塑的感觉。你可以根据自己的需求来培养 Vim,这就像恋(gao)爱(ji)一样是两个人互相适应的过程。互相习惯才能把效率最大化。

原文:http://www.geekplux.com/2015/06/06/vim-those-fit-yourself-are-the-best.html

vim: Vim插件学习

参考 @左耳朵耗子 的vim学习系列,不断补充中。

VIM万岁!:P

1. 浏览当前目录

Python

:E          浏览当前目录,回车进入目录或打开文件
    -       到上级目录
    D       删除文件
    R       改文件名
    s       对文件排序
    x       执行文件(无输出?) 

2. 编辑缓冲区

Python

:ls                     查看当前缓冲区打开文件(%指示当前缓冲区)
:buffer x               切换当前打开的文件x
    :bnext      (:bn)   后一个缓冲区文件
    :bprevious  (:bp)   前一个缓冲区文件
    :blast      (:bl)       最后一个缓冲区文件
    :bfirst     (:bf)       第一个缓冲区文件 

3. 窗口分屏浏览

Python

:Hexplore       (:He)   上下分屏,并在下屏浏览目录
:He!                    上下分屏,并在上屏浏览目录
:Vexplore       (:Ve)   左右分屏,并在左屏浏览目录
:Ve!                    左右分屏,并在右屏浏览目录
:set scb                设置分屏同步移动
:set scb!               解除分屏同步移动 

4. Tab浏览

Python

:Texplore       (:Te)   分Tab浏览目录
    gt                  移动到上一页
    gT                  移动到下一页
    {i} gt              移动到指定(i)页 

5. 光标移动

Python

%                       首先将光标移动至括号处 (、{、[ ,然后输入%即可将光标移动至与之相匹配的另一处
*, #                    将光标移动至某单词,通过(*下一个)或(#上一个)移动光标至所匹配的单词处
<start><command><end>   从start至end执行command
command:
    y                   拷贝
    d                   删除
    v                   可视化选择
    gU                  变大写
    gu                  变小写
position:
    0                   行头
    $                   行尾
    ^                   本行第一个非blank字符
    g_                  本行最后一个非blank字符
    fa                  到本行下一个“a”字符处
    t,                  到“,”前的第一个字符处 

6. 参考文献

原文:http://kevinsj.com/?p=347

vim: 从 0 开始搭建 Vim 编辑器

Abstract

本文主要介绍如何从0开始,构造适合自己的vim。目的不是比较什么编辑器更好,也不是宣传vim多么神奇,只是想给需要的人提供一些帮助。

文章以 ubuntu14.04, Vim 7.4为例子。主要介绍如何自己动手构造能高效编码的Vim,而不是使用已有的配置。这里说明,已有的配置固然很好,但是也是有针对性,初用Vim应该在探索中发现自己喜欢的配置。

远古时代

首先,原始的vi用起来是很别扭的。我新装了一个虚拟机,里面还没有vim,只有vi。

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

可以看到,刚装上的时候vi是相当之简陋。↑↓←→四个键都不能用。

从 Vi 升级到 Vim

sudo apt-get install vim

这里当然提前要把源设置好。如何设置源不是本文讨论的范围。

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

Vim安装完成之后,会自动覆盖vi。现在的vim已经是一个可以使用的版本了。忍不住来一段HelloWorld。

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

唉~~~~那么问题来了:

  1. 配色怎么这么难看。
  2. 怎么没有行号。
  3. 这个tab键一下子空了8格,能不能调一下…

.vimrc 的设置

首先介绍一下这个.vimrc文件。这个文件在根目录里面,ls查看不到,用ll可以看到。这个文件是vim的配置文件,想要解决上面的几个问题,我们需要更改这个文件里面的一些内容。

初次使用根目录中可能根夲就没有.vimrc文件。noproblem,可以自己建一个。

设置行号,用4空格代替tab

vi .vimrc

打开了一个空文件,我们先来加一点东西在里面。

set nu //加入行号显示
set ts=4 //将tab键宽度定义为4
set expandtab //用空格代替tab
 

保存退出。再次进入刚刚的.vimrc,行号出来了。按一下tab试试,4空格!YES!

设置colorscheme

颜色还是那么难看。没关系,这个是可以调的。首先,终端要改成用户自定义颜色。Edit->Profile_Proference

需要将这个对钩去掉。然后自己选一个想要的底色。

然后,在 usr/shared/vim/vim74/color里面,有很多配色方案。打开.vimrc,加入

colorscheme desert //此处desert可换成任意一种配色方案

再次启动vim。


好看了??- -|||

设置自动缩进

set cindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
 

将着两行也加入到.vimrc, 可以让代码以C风格缩进。编辑的时候不用频繁的敲tab和space了。

summary

上面简单介绍了vim的初步配置,但是,仅仅这样还是不够。你可能会喜欢Eclipse左边的文件树结构,可能也喜欢Eclipse可以显示一个类里面的所有方法,也可能喜欢Eclipse的静态语法检查,也可能喜欢Eclipse的……

怎么都是Eclipse! – -|||因为Eclipse实在太好用…

我想说的是,Eclipse有的功能,vim一样可以。要实现诸多的功能,vim需要安装一些插件。

Vim 插件管理

vim插件众多,配置插件更是一件麻烦事儿,不过没关系,推荐大家一款插件管理器 Vundle。有了Vundle,插件的安装不再麻烦。

当然,首先你要有一个Vundle。

Vundle安装

Vundle网址

参考里面的安装方式,首先你要装git,用git装Vundle。

没事,咱们就先装个git。

sudo apt-get install git

搞定!

下面可以安装Vundle了。

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
 

NOTE:如果https访问失败,可以改正git试一下。

好了,Vundle也有了。在我们安装我们喜欢的插件之前,要按照vbundle的说明书,自己看看 .v imrc里面需要怎么写。

请仔细阅读Vundle的说明书。就那么一页纸,please~~~

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

我们的.vimrc文件现在应该改成这个样子。想装的插件必须放在begin()和end()中间。其中这个Vundle.vim是必须要有的。

现在打开vim,在命令模式下

:PluginInstall

试一下。此时插件Vbundle正在安装。

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

安装完成后,左下角会出现Done!

此时我们已经可以安装自己想要的任何插件了。不过首先你要有插件 – -||||

NerdTree

NerdTree
可以让你的vim拥有文件树,just like Eclipse and vs。

ctrlp

ctrlp
可以方便的在vim打开文件。

summary

将上面两个插件的git地址,按照vundle要求的格式加入.vimrc。

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

还是按照上面的步骤,运行vim,执行

:PluginInstall
vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

安装完成后,打开刚刚的HelloWorld。输入

:NERDTreeToggle

打开了文件树。

在命令模式下,ctrl-p,可以打开文件检索。

vim: 从 0 开始搭建 Vim 编辑器
vim: 从 0 开始搭建 Vim 编辑器

Summary

vim还有很多有意思的插件,有了这些插件,可以极大的提高我们的工作效率。

最后感觉,插件的并不是越多越好,也不是vim就是最好。写java裸体Eclipse跟全副武装的vim谁更好用不言自明。所以,针对不容的环境,不同的项目,应选择最合适的编辑器,就像不同的项目要用不同的开发语言一样。

原文:http://segmentfault.com/a/1190000002885785

vim /vi :如何在vim 编辑器里画图

如果你想在vim编辑器里也可以实现画简单的线性图,那么可以使用vim 里的一个叫 VIM Drawit!的插件。
下面来看看如何来安装vim drawit! 插件:
首先下载vim drawit! 安装包,输入下面的命令:

wget -O DrawIt.vba.gz http://www.vim.org/scripts/download_script.php?src_id=8798
 

安装vim drawit!插件
使用vim 命令编辑下载的vim drawit! 文件,在末行模式下输入下面的命令:

:so %
:q
 

vim 编辑器里 Drawit! 插件使用
\di 命令将会开启drawit! 插件
\ds 命令将会关闭drawit! 插件
举个例子:
使用vim drawit!插件画个导航图
使用上下左右键你可以用来画出方框或者方向线。
如下图:
如何在vim 编辑器里画图1

5个最好的 linux 文本编辑器

不管是在windows系统还是linux系统下都会有很多的文本编辑器,用来编辑文件,或者用来写文章,写代码。文本将会总结出在linux操作系统下使用最多的,也可以说是最好的5个 linux 文本编辑器 。
vi /vim 文本编辑器无可厚非是linux系统下最好的也是用的最多的文本编辑器,而且linux系统默认情况下也会安装vi编辑器。
下图是五个 linux 文本编辑器 的统计情况:
5个最好的linux 文本编辑器2
 
1# linux vi/vim 文本编辑器
vi/vim
 
产品主页:http://www.vim.org
作者: Bram Moolenaar
最新版本:vim 7.4
操作系统:unix,linux,windows
更多内容关于vim
 
2# linux gEdit 文本编辑器
5个最好的linux 文本编辑器2
 
gEdit 文本编辑器是Linux GNOME桌面环境中默认的文本编辑器。
产品主页:http://projects.gnome.org/gedit/
最新版本: 2.26.2
操作系统:多平台
 
3# Linux Nano 文本编辑器
5个最好的linux 文本编辑器2
 
产品主页: http://www.nano-editor.org/
Latest Stable Release: 2.0.9
更多关于 Nano 编辑器
 
4# Linux gVim 文本编辑器
产品主页:http://vimdoc.sourceforge.net/htmldoc/gui.html
gVim 是vim 编辑器的图形界面版本。
 
5# linux Emacs 文本编辑器
5个最好的linux 文本编辑器2
 
产品主页: http://www.gnu.org/software/emacs/
当前版本: 22.3
操作系统:多平台
更多关于 Emacs 编辑器
 

vi /vim:如何将光标跳转到文件末尾

当你用 vi /vim 编辑一个大文件的时候,如何能从当期行快速跳转到最后一行呢?
你可以使用下面的 vi / vim 的快捷键命令:

G
 

该命令会直接跳转到末尾行。
如果想在回到开始行的话,可以输入下面的命令:

1G
 

gg
 

 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

Linux: vi / vim 字符串搜索和替换

在linux或者unix系统下,我们常常会用vi/vim命令打开一个文件,并在文件里查找特定的字符串,也有可能会将找到的字符串替换成另一个字符串。
vi/vim
 
vi /vim 命令字符串搜索并替换的命令格式如下:

%s/old/new/
 

 
vi /vim 命令字符串搜索并替换例子
查找字符串“oldtest”并将其替换成”newtest”,在vim 末行模式下输入命令:

:$s/oldtest/newtest/
 

 
上面的命令只会替换所有行里发现的第一个匹配的字符串。
如果你想替换文本所有匹配的字符串,可以使用下面的命令:

:%s/oldtest/newtest/g
 

 
vi/vim命令限定范围查找并替换字符串
如果你只想将从第10行到第20行的文本行中的查找并替换字符串,那么可以输入下面的命令:

:10,20s/oldtest/newtest/
 

 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

vi / vim: 如何在打开文件的时候直接跳转到指定的函数或行

当使用linux 下vi /vim命令打开文件后,你肯定想直接跳转到某个特定的函数或者字符串或者某行。如何来做?
你可以使用下面的命令来实现:
vi +<函数名> <要打开的文件名>

vi +<行号> <要打开的文件名>
例子:打开文件后直接跳转到第五行,输入下面的命令:

vim +5 foo.txt
 

输出如下:
vim 如何在打开文件的时候直接跳转到指定的函数或行1
打开文件后直接跳转当特定的函数,输入下面的命令:

vim +/pathmunge /etc/profile
 

命令输出:
vim 如何在打开文件的时候直接跳转到指定的函数或行1
 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

常用 vi / vim 快捷键命令总结

当你在使用vim命令编辑一个文件的时候,会用到很多的快捷键操作,比如拷贝一整行,拷贝多行文本等。。
vi/vim
#1 拷贝整行文本

yy
 

shift y
 

:ny
 

#2 拷贝从光标位置开始到行尾的字符串

y$
 

#3 拷贝当前行之后的三行内容

3yy
 

#4 拷贝一个范围的文本行

:1,5y
 

1y5
 

#5 删除一整行

dd
 

:nd
 

#6 删除从光标处到行末的所有字符串

d$
 

shift d
 

#7 删除多行文本

:1,5d
 

1d 5
 

#8 将vim切换到替换模式

shift r
 

#9 撤销操作

u
 

#10 重做操作

ctrl r
 

解决ubuntu下vim “E319:命令不可用”问题

在ubuntu linux 系统下,但使用vim 命令打开一个文件后,如果你输入 vim 命令:syntax on 来开启代码高亮显示的时候,会遇到下面的E319问题。
E319: Sorry, the command is not available in this version: syntax on
如何来解决这个问题呢?
你需要重新安装完整版的vim版本,输入下面的命令:

sudo apt-get install vim
 

vim / vi命令在没有root权限的情况下如何保存文件

当你在linux系统下以一个普通用户登录系统后,使用vi/vim命令编辑一个文件,当你想保存文件的时候,系统会提示说你么有root权限,无法保存。这个时候该怎么办?
 
你可以使用 linux tee 命令结合 linux sudo 命令来实现没有root权限的情况下不用创建临时文件就可以保存更改的文件。
 
首先使用普通用户登录当前系统,输入下面的vi 命令,打开一个文件:
 

vi /etc/apache2/conf.d/mediawiki.conf
 

 
打开文件后,做一些更改,输入wq保存,你会看到下面的错误。

E166: Can't open file for writing
 

 
看下图:
 
vim vi 没有root权限保存文件1
这个时候如果想保存文件,可以在末行模式下输入下面的命令:

:w !sudo tee %
 

 
vim vi 没有root权限保存文件2
 
其中,
:w 是写一个文件
!sudo 是调用shell sudo 命令
tee 是将输出的内容重定向
 
vim vi 没有root权限保存文件3
 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

启用或关闭vim编辑器中的代码高亮显示

当你使用vim编辑器编写代码的时候,vim编辑器具有识别不同语言代码的高亮显示功能,如何来开启vim代码高亮显示功能呢? 如何来关闭vim 代码高亮显示呢?
大家都知道vim是一个非常强大的代码编写工具,可以用来编写各种不同的语言。
 
启用vim代码高亮显示
首先使用vim命令打开一个文件,输入命令:

vim filename
 

 
然后输入“:”进入末行模式,输入下面的vim命令:

:syntax on
 

 
默认情况下,vim编辑器的代码高亮功能是启用的。
 
下面是用vim打开的高亮显示的bash shell 代码:
 
启用或关闭vim编辑器中的代码高亮显示
启用或关闭vim编辑器中的代码高亮显示
 
关闭vim代码高亮显示
进入末行模式,输入下面的命令:

:syntax off
 

 
看下图:
启用或关闭vim编辑器中的代码高亮显示
 
让代码高亮显示设置永久生效
你可以通过编辑~./vimrc 配置文件,加入下面的内容到文件里,保存并退出后,就会永久生效

vim .vimrc
 

加入行:

syntax on
 

 
保存退出。
 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

vi /vim:如何退出 vi /vim 文本编辑器

在linux 系统下如何退出当前的vi/vim编辑器。
vi /vim 是linux系统下用的最多的一个文本编辑器,可以用这个编辑器来编辑所有的二进制文本,特别是用来编辑不同的程序文件,可以高亮显示代码行。
输入下面的vim/vi 命令打开文件:
vim filename
vi filename
退出vim编辑器
首先你需要从输入模式退出到命令模式,可以输入ESC键。然后,输入下面的命令,并回车就可以退出vim编辑器。

:q
 

:q!
 

:x
 

如图:
如何退出 vi vim 文本编辑器
 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

Vi / Vim:如何保存并退出编辑器

当使用vi /vim 命令编辑一个文件后,如何才能保存并退出当前的vi /vim 编辑器呢?
vi/vim
为了保存并退出vi /vim,可以参照下面的步骤:
1# 首先从输入模式返回到命令模式,输入:ESC 键
2# 输入”:”,进入末行模式
3# 再输入下面的命令

x
 

x!
 

wq!
 

如下图:
Vi Vim 如何保存并退出编辑器
之后输入回车,就能保存并退出 vi /vim 了。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

Vim如何同时编辑多个文件

在linux系统下,如何使用vim 命令同时打开并编辑多个文件呢?文本将会讲述如何使用vim 命令在编辑器里同时显示多个文件的窗口,并对其进行编辑。
vi/vim
 
在命令行窗口下输入下面的vim 命令同时打开两个编辑窗口(水平显示):

vim -o /etc/passwd /etc/hosts
 

 
输出入下图:
Vim如何同时编辑多个文件1
 
如果想垂直显示编辑窗口,可以使用大O选项,输入下面的命令:

vim -O /etc/passwd /etc/hosts
 

 
输出如下图:
Vim如何同时编辑多个文件1
 
在不同的窗口之间切换
当你在不同的窗口打开多个文件的时候,你需要在不同的窗口之间切换,参照下面的vim 快捷键命令:
1.输入 CTRL + W + <左箭头> 将光标定位到左边的窗口
2.输入 CTRL + W + <右箭头> 将光标定位到右边的窗口
3.输入 CTRL + W + <向上箭头> 将光标定位到上面的窗口
4.输入 CTRL + W + <向下箭头> 将光标定位到下面的窗口
5. 输入两次CTRL+W将会快速的在不同的窗口之间切换
 
当你切换到你想编辑的窗口后,就可以和正常使用 vim 编辑器一样对文件进行编辑了。
 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

vi / vim 如何同时打开多个文件

对于刚使用 linux vi /vim 文本编辑器的人来说,可能想知道,如何才能使用 vi /vim 同时打开多个文件,并在不同的打开的文件之间进行切换。本文将会讲述通过 vi /vim 命令同时打开两个文件,并在这两个文件之间进行切换。
vi/vim
 
输入下面的 vi /vim 命令,打开两个文件:

vi foo.txt test.txt
 

 
如果想同时打开当前目录下所有的”.txt”的文件,可以输入:

vi *.txt
 

 
当打开多个文件后,我们来看些如何在不同的文件之间进行切换。
1# 列出当前 vi /vim 命令打开的所有文件
输入命令:

:ls
 

 
命令输出:

:ls
  1 %a   "foo.txt"                         line 1
  2      "test.txt"                     line 0
 

 
2# 从当前打开文件切换到另一个文件
输入vi /vim 命令:

:n
 

:bn
 

 
3# 切换到当前打开文件的前一个打开的文件
输入 vi /vim 命令:

:p
 

:bp
 

 
vi /vim 可视化编辑
将当前的编辑屏幕垂直切分
输入:

CTRL+W v
 

 
将当前的编辑屏幕水平切分

CTRL+W s
 

 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

vi /vim 如何在编辑文件的时候文件名自动补齐

当使用vi /vim 文本编辑器编辑文件的时候,如何自动补齐文件名?这个有点类似于bash shell 里的命令自动补齐功能。
在vi /vim 编辑器里,当在你打开了一个文件,然后想在打开另一个文件,这个时候可以再末行模式下输入类似于命令补齐功能的命令,使用tab键,将文件名补齐,并打开该文件。
比如要打开foo.txt文件,输入命令:

:f foo[TAB]
 

如果想切换目录,也可以使用目录自动补齐,输入:

cd /e[TAB]
 

查看更多的帮助,输入:

:help
 

更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全