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

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

Hick叽喳:


1
    最好的编辑器不是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文件加入以下代码片段:

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

插件

插件管理工具vunble

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

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

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

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

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

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

    1
    2
    3
    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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
" 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的键映射


1
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代码补全。

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编码的文件

1
2
3
set fileencodings=cp936
set fileencoding=cp936
set encoding=cp936

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

1
2
3
set fileencodings=utf-8
set fileencoding=utf-8
set encoding=cp936 或者 set encoding=utf-8

同时支持GBK和UTF-8编码

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

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


1
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 文件中添加以下内容:

1
2
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,如果没安装的话用:


1
yum -y install convmv

安装。

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


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

常用参数:

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

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


1
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,用习惯发现到哪都离不开这玩意。
  • 退出编辑器
1
2
3
4
5
6
7
:w     将缓冲区写入文件,即保存修改
:wq     保存修改并退出
:x     保存修改并退出
:q     退出,如果对缓冲区进行过修改,则会提示
:q!     强制退出,放弃修改
--->
我个人比较喜欢的是:大写ZZ退出
  • 查找替换
1
2
3
4
5
6
7
8
/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 
  • 复制粘贴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dd     删除光标所在行
dw     删除一个字(word)
x     删除当前字符
X     删除前一个字符
D     删除到行末
yy     复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6
yw     复制一个字
y$     复制到行末
p     粘贴粘贴板的内容到当前行的下面
P     粘贴粘贴板的内容到当前行的上面
]p     有缩进的粘贴,vim会自动调节代码的缩进
&quot;a     将内容放入/存入a寄存器,可以支持多粘贴板
--->
复制粘贴配合可视化操作配合移动光标,绝壁是最人性化最舒服的复制好吗?
按v进入可视化,选定后按y,定位光标再p
  • 移动光标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
在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处
  • 编辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
  • 插入模式
1
2
3
4
5
6
7
i     从当前光标处进入插入模式
I     进入插入模式,并置光标于行首
a     追加模式,置光标于当前光标之后
A     追加模式,置光标于行末
o     在当前行之下新加一行,并进入插入模式
O     在当前行之上新加一行,并进入插入模式
Esc     退出插入模式
  • 可视模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
标记文本
v     进入可视模式,单字符模式
V     进入可视模式,行模式
ctrl+v     进入可视模式,列模式,类似于UE的列模式
o     跳转光标到选中块的另一个端点
U     将选中块中的内容转成大写
O     跳转光标到块的另一个端点
aw     选中一个字
ab     选中括号中的所有内容,包括括号本身
aB     选中{}括号中的所有内容
ib     选中括号中的内容,不含括号
iB     选中{}中的内容,不含{}
对标记进行动作
>     块右移
<     块左移
y     复制块
d     删除块
~     切换块中内容的大小写
  • 标签命令
1
2
3
4
5
6
:tabe fn     在一个新的标签页中编辑文件fn
gt     切换到下一个标签页
gT     切换到上一个标签页
:tabr     切换到第一个标签页
:tabl     切换到最后一个标签页
:tabm [N]     把当前tab移动到第N个tab之后
  • 窗口命令
1
2
3
4
ctrl+w s     水平分割窗口
ctrl+w w     切换窗口
ctrl+w q     退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
ctrl+w v     垂直分割窗口
  • 其他
1
2
3
4
5
vim在保存之前不会对文件做实际的修改,只是加载到缓冲区中,对文件的编辑其实是对缓冲区的编辑,直到:w时才会存入物理文件。
:e file     把file加载到新的缓冲区中
:bn     跳转到下一个缓冲区
:bd     删除缓冲区(关闭文件)
:sp fn     分割窗口,并将fn加载到新的窗口中

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

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

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

    
    
    1
    bash
    1
    alias vim='mvim -v'

安装 Vundle

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

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

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

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

    1
    2
    3
    4
    5
    6
    7
    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 语义支持的版本
    1
    2
    3
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --clang-completer
    • 不带 C-family languages 语义支持的版本
    1
    2
    3
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --clang-completer
    • 带 C# 语义支持的版本
    1
    2
    3
    bash
    cd ~/.vim/bundle/YouCompleteMe
    ./install.sh --omnisharp-completer
    • 带 Go 语言语义支持的版本
    1
    2
    3
    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