首先,安装vim,一般情况下在安装redhat时,默认就安装了vim。你可以用vim -v来查看你的系统是否安装了vim。如果显示了vim版本就表示已经安装了vim,否则你可以通过“从这里开始”–>“系统设置”–>“添加/删除应用程序”,然后选中“编辑器”来更新你的软件。
安装之后就要通过配置.vimrc配置符合自己风格的vim了。接下来就要找到.vimrc,如果你上网查找一些相关的资料时,他们会告诉你:在用户主目录——/home/root/下有一个.vimrc文件,在/etc/目录下也有一个vimrc。
但是,也许你找了很久都没有找到这两个文件,这很正常,因为在刚安装上vim时,在以上两个目录中确实没有这两个文件,换句话说,这两个文件是认为加上去的。要找到你的vimrc,首先用vim打开一个文件,然后在vim中输入指令”:version” ,你会看到”系统vimrc配置文件:”/usr/share/vim/vim74”“,然后将这个文件拷贝到你的主目录下,cp /usr/share/vim/vim74/vimrc_examples /root/ ,将vimrc改名为隐藏文件,mv vimrc .vimrc。接下来打开.vimrc,在里面添加几个条目:
vimrc 统一配置,待试:http://vim.spf13.com/#vimrc
如果设置 /etc/vimrc 是影响所有用户,如果设置 /root/.vimrc 是影响 root 用户。
如果设置完后,发现功能没有起作用,检查一下系统下是否安装了vim-enhanced包,查询命令为: $rpm –q vim-enhanced
问题一:经常很多代码不对齐,一行行对齐比较麻烦
解决:在命令行模式,按“n==”,注意 n 指的是 行号。
问题二:在vim下粘贴了一大段python代码,但是从某一行开始全部都多后退了一个tab
在vim里,粘贴代码之前最好进入粘贴模式,这样就会关闭自动缩进
set paste
将代码粘贴进去之后再关闭粘贴模式
set nopaste
问题三:如何缩进
缩进单行代码是两个大于号'>>'
回缩就是两个小于号'<<'
:10,100>
第10行至第100行缩进
:20,80<
第20行至第80行反缩进
1 //在这里按下'v'进入选择模式
1
1//光标移动到这里,再按一次大于号'>'缩进一次,按'6>'缩进六次,按'<'回缩。以下同理
function helo{//将光标移动到'{',在按下'%',光标将会移动到匹配的括号
//这里省略1000行
}//光标会移动到这里,再按一次大于号'>'就可以缩进
问题四:跳转到某行
:n : 跳转到指定行
gg : 跳转到文件头
Shift+g : 跳转到文件末尾
:[range]s/from/to/[flags]
range:搜索范围,如果没有指定范围,则作用于但前行。
:1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换; :10s/from/to/ 表示只在第10行搜索替换; :%s/from/to/ 表示在所有行中搜索替换; 1,$s/from/to/ 同上。
flags 有如下四个选项:
这些选项可以合并使用,如cgi表示不区分大小写,整行替换,替换前询问。
元字符 说明
. 匹配任意字符
[abc] 匹配方括号中的任意一个字符,可用-表示字符范围。如[a-z0-9]匹配小写字母和数字
[^abc] 匹配除方括号中字符之外的任意字符
\d 匹配阿拉伯数字,等同于[0-9]
\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x 匹配十六进制数字,等同于[0-9A-Fa-f]
\X 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\l 匹配[a-z]
\L 匹配[^a-z]
\u 匹配[A-Z]
\U 匹配[^A-Z]
\w 匹配单词字母,等同于[0-9A-Za-z_]
\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t 匹配<TAB>字符
\s 匹配空白字符,等同于[\t]
\S 匹配非空白字符,等同于[^\t]
在正则式中以(和)括起来的正则表达式,在后面使用的时候可以用\1、\2等变量来访问(和)中的内容。
例子
删除以空格或TAB开头到结尾的空行:%s/^[ | \t]*$// 或者 g/^[ | \t]*$/d |
首先到http://ctags.sourceforge.net/下载ctags-5.8.tar.gz ,注意:有些浏览器(例如IE8)会阻止文件下载,这时只需要解除阻止即可进入下载界面。然后安装ctags.
#tar xzvf ctags-5.8.tar.gz
#cd ctags-5.8
#./configure
#make
#make install
注意:如果你在执行./configure时出现错误,那么很有可能就是你的gcc没有安装完全,解决方法——“从这里开始”–>“系统设置”–>“添加/删除应用程序”,然后选择“开发工具”,更新你的gcc编译器。安装完成后就可以使用ctags命令了。
# ctags -R * 或 # ctag -R // 在需要参加 tag 的目录里面执行。
“-R”表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。”tags”文件中包括这些对象的列表:
l 用#define定义的宏
l 枚举型变量的值
l 函数的定义、原型和声明
l 名字空间(namespace)
l 类型定义(typedefs)
l 变量(包括定义和声明)
l 类(class)、结构(struct)、枚举类型(enum)和联合(union)
l 类、结构和联合中成员变量或函数
注意:运行vim的时候,必须在”tags”文件所在的目录下运行。否则,运行vim的时候还要用”:set tags=”命令设定”tags”文件的路径,这样vim才能找到”tags”文件。
VIM用这个”tags”文件来定位上面这些做了标记的对象,下面介绍一下定位这些对象的方法:
1) 用命令行。在运行vim的时候加上”-t”参数,例如:
# vim -t foo_bar
这个命令将打开定义"foo_bar"(变量或函数或其它)的文件,并把光标定位到这一行。
2)在vim编辑器内用”:ta”命令,例如:
":tag foo_bar" 跳转到某个标签
":tselect /^foo 查找某个标签,并选择调整,可以用 <Tab> 补齐
3) 标签跳转
taglist_45.zip 首先下载 taglist_45.zip,下载地址http://www.vim.org/scripts/script.php?script_id=273 解压文件:unzip -d taglist taglist_45.zip -d 表示要把文件解压到某个目录下。 解压得到两个文件。./taglist/doc/taglist.txt; ./taglist/plugin/taglist.vim 分别复制到各自的目录下:
cp ./taglist/doc/taglist.txt /usr/share/vim/vim74/doc/
cp ./taglist/plugin/taglist.vim /usr/share/vim/vim74/plugin/
配置 ~/.vimrc文件。
filetype plugin on
let Tlist_Ctags_Cmd = '/usr/bin/ctags' "设置ctags命令目录
let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Left_Window = 1 "让taglist窗口在右侧显示
let Tlist_Auto_Open = 1 "自动打开 taglist
在vim中命令模式下使用:
:Tlist // 打开或者关闭当前文件的索引;
:TlistSync // 立即在打开的索引窗口中定位当前的光标所在位置属于哪个函数或者结构定义中。
左右窗口切换:Ctrl +ww
在Taglist窗口按
F1:打开帮助
回车键: 跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)
o: 新建一个窗口,跳到标记定义处
p: 预览标记定义(仍然在taglist窗口)
空格:显示标记的原型(如函数原型)
u:更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)
s:选择排序字段
d:删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)
x:放大/缩小taglist窗口
+:展开(指标记)
-:折叠
*:全部展开
=:全部折叠
[[:将光标移到前一个文件的起点
]]:将光标移到后一个文件的起点
q:退出taglist窗口
F1:关闭帮助
yum install cscope.x86_64
这个源里应该有了,如果没有请到其官网 http://sourceforge.net/projects/cscope/files/
#tar xzvf cscope-15.8b.tar.gz
#cd cscope-15.8b
#./configure
#make
#make install
将以下内容添加到~/.vimrc中,vim会自动加载当前目录下的符号索引cscope.out,可以使用ctrl+t、ctrl+]等
" cscope setting
if has("cscope")
set csprg=/usr/bin/cscope "指定用来执行 cscope 的命令
set csto=1 "先搜索tags标签文件,再搜索cscope数据库
set cst "使用|:cstag|(:cs find g),而不是缺省的:tag
set nocsverb "不显示添加数据库是否成功
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out "添加cscope数据库
endif
set csverb "显示添加成功与否
endif
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
添加cscope符号索引数据库后,可以调用”cscope find”命令进行查找,vim支持8种cscope的查询功能。如在代码中查找调用work()函数的函数,可以在vim命令状态下输入”:cs find c work”,回车即可。还可以进行字符串查找,它会对双引号或单引号括起来的内容查找。还可以输入一个正则表达式,这类似于egrep程序的功能。
:cs help (vim command下查询)
C-@ +
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文件
使用下面的命令生成代码的符号索引文件:
$ cscope -Rbkq
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。上面命令的参数含义如下:
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-k: 在生成索引文件时,不搜索/usr/include目录
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用"-",表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
在缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,一般不用这个界面,所以使用了”-b”选项。如果已经进入了这个界面,按CTRL-D退出。
接下来可以在vim里浏览代码了
$ vim main.c
在vim里命令状态下添加符号索引库
: cscope add cscope.out
然后可以查看相应的函数定义或文件,ctrl+t返回。
: cscope find g print
: cscope find f cstest.h
tmux是一个优秀的终端复用软件,即使非正常掉线,也能保证当前的任务运行,这一点对于 远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失!此外,tmux完全使用键盘 控制窗口,实现窗口的切换功能。 简单地说,tmux对于我主要有两个功能(这应该也是tmux的主要功能): split窗口。可以在一个terminal下打开多个终端,也可以对当前屏幕进行各种split,即可以 同时打开多个显示范围更小的终端。 在使用SSH的环境下,避免网络不稳定,导致工作现场的丢失。想象以下场景, 你在执行一条命令的过程中,由于网络不稳定,SSH连接断开了。这个时候,你就不知道之前 的那条命令是否执行成功。如果此时你打开了很多文件,进入了较深层次的目录,由于网络 不稳定,SSH连接断开。重新连接以后,你又不得不重新打开那些文件,进入那个深层次的 目录。如果使用了tmux,重新连接以后,就可以直接回到原来的工作环境,不但提高了工作 效率,还降低了风险,增加了安全性。
sudo apt-get install tmux 安装完成后输入命令tmux即可打开软件,界面十分简单,类似一个下方带有状态栏的终端控制台; 不出意外,这时候你会跟我第一次一样,觉得tmux没什么牛逼的。根据tmux的定义,在开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个 窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板, 虽然其使用方法与终端控制台完全相同。 tmux使用C/S模型构建,主要包括以下单元模块:
按住Ctrl+b 然后按箭头可以调整窗口大小
这里需要说明一点的是,tmux的任何指令,都包含一个前缀,也就是说,你按了前缀(一组按键, 默认是Ctrl+b)以后,系统才知道你接下来的指令是发送给tmux的。
我们先来看一下几个配置。tmux的配置文件是 ~/.tmux.conf,这个文件可能不存在,你可以自己新建。下面开始配置,首先,有没有 觉得tmux的前缀按起来太不方便了,ctrl与b键隔得太远,很多人把它映射成C+a,也就 是在配置文件(~/.tmux.conf)中加入下面这条语句:
#设置前缀为Ctrl + a
set -g prefix C-a
与此同时,取消默认的前缀按键:
#解除Ctrl+b 与前缀的对应关系
unbind C-b
配置完以后,重启tmux起效,或者先按C+b,然后输入:,进入命令行模式, 在命令行模式下输入: source-file ~/.tmux.conf 你也可以跟我一样,在配置文件中加入下面这句话,以后改了只需要按前缀+r了。
#将r 设置为加载配置文件,并显示"reloaded!"信息
bind r source-file ~/.tmux.conf \; display "Reloaded!"
关于前缀,很多人都喜欢改成Ctrl+a,不过我个人更喜欢Ctrl+x,如果你是vim用户,你一定懂 的。还有就是面板的切换很不方便,需要先按前缀,再按方向键,还记得vim里面怎么切换各个 面板的吗?tmux也可以,因为它支持映射。把前缀映射改成Ctrl+x,再加入如下几条语句, 现在切换窗口就和vim一摸一样了,顿时觉得亲切了很多。
#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R
上面的最后一条语句会更改C-x l的功能,我挺喜欢这个功能的,因为我们很时候都是在两个窗 口或这两个面板中切换,所以我又加入如下语句
#select last window
bind-key C-l select-window -l
现在我的l键可不能随便按了,Ctrl+x l是切换面板,Ctrl+x Ctrl+l切换窗口,Ctrl+l清屏。 复制模式copy-mode 前缀 [ 进入复制模式 按 space 开始复制,移动光标选择复制区域 按 Enter 复制并退出copy-mode。 将光标移动到指定位置,按 PREIFX ] 粘贴 如果把tmux比作vim的话,那么我们大部分时间都是处于编辑模式,我们复制的时候可不可以像 vim一样移动呢?只需要在配置文件(~/.tmux.conf)中加入如下行即可。
#copy-mode 将快捷键设置为vi 模式
setw -g mode-keys vi
Seesion 可以有效地分离工作环境。我有一个“工作” session 和一个“娱乐” session;在“工作”中,我打开所有日常开发需要的内容,而在“娱乐”中,我只打开当前开源的 gem 或者在家 hack 的一些东西。
终端运行 tmux attach 返回会话
tmux new -s session_name
创建一个叫做 session_name 的 tmux session
tmux attach -t session_name
重新开启叫做 session_name 的 tmux session
tmux switch -t session_name
转换到叫做 session_name 的 tmux session
tmux list-sessions
列出现有的所有 session
tmux kill-sessions -t session_name
tmux detach (prefix + d)
离开当前开启的 session
Tmux 有一个含有标签的界面,但是它命名这些标签为 “Windows”。为了保持有序,我重新命名了所有我使用的 windows;如果我正在编写一个 gem,我会使用这个 gem 的名字来命名 window。客户端的应用程序也一样。这样,我就能通过名字而不是运行的程序找到相应的 window。
tmux new-window (perfix + c)
创建一个新的 window
tmux select-window -t :0-9 (perfix + 0-9)
根据索引转到该 window
tmux rename-window (perfix + ,)
重命名当前 window
Panes 让我的开发时间从平淡变为棒极了,任何我想做的事情,我可以在一个终端中完成。
tmux split-window (perfix + “)
将 window 垂直划分为两个 pane
tmux split-window -h (perfix + %)
将 window 水平划分为两个 pane
tmux swap-pane -[UDLR] (perfix + { or })
在指定的方向交换 pane
tmux select-pane -[UDLR]
在指定的方向选择下一个 pane
tmux select-pane -t :.+
选择按数字顺序的下一个 pane
如果觉得每次都要打开tmux,然后在打开几个窗口和面板很麻烦,那么下面这个脚本你一定会 喜欢。参考这里 #!/bin/sh #
cmd=$(which tmux) # tmux path
session=codefun # session name
if [ -z $cmd ]; then
echo "You need to install tmux."
exit 1
fi
$cmd has -t $session
if [ $? != 0 ]; then
$cmd new -d -n vim -s $session "vim"
$cmd splitw -v -p 20 -t $session "pry"
$cmd neww -n mutt -t $session "mutt"
$cmd neww -n irssi -t $session "irssi"
$cmd neww -n cmus -t $session "cmus"
$cmd neww -n zsh -t $session "zsh"
$cmd splitw -h -p 50 -t $session "zsh"
$cmd selectw -t $session:5
fi
$cmd att -t $session
exit 0
Spyder 相对来说比较小众,但称得上一个强大的交互式 Python 语言开发环境,同样提供高级的代码编辑、交互测试、调试等特性,通常各个 Linux发行版都会内置有它的安装包。
turning-vim-into-a-modern-python-ide.pdf
vim编码方面的基础知识:
1. 存在3个变量
encoding—-该选项使用于缓冲的文本(你正在编辑的文件),寄存器,Vim 脚本文件等等。你可以把 ‘encoding’ 选项当作是对 Vim 内部运行机制的设定。 fileencoding—-该选项是vim写入文件时采用的编码类型。 termencoding—-该选项代表输出到客户终端(Term)采用的编码类型。
2.此3个变量的默认值
encoding—-与系统当前locale相同,所以编辑文件的时候要考虑当前locale,否则要设置的东西就比较多了。 fileencoding—-vim打开文件时自动辨认其编码,fileencoding就为辨认的值。为空则保存文件时采用encoding的编码,如果没有修改encoding,那值就是系统当前locale了。 termencoding—-默认空值,也就是输出到终端不进行编码转换。 由此可见,编辑不同编码文件需要注意的地方不仅仅是这3个变量,还有系统当前locale和、文件本身编码以及自动编码识别、客户运行vim的终端所使用的编码类型3个关键点,这3个关键点影响着3个变量的设定。 如果有人问:为什么我用vim打开中文文档的时候出现乱码? 答案是不确定的,原因上面已经讲了,不搞清楚这3个关键点和这3个变量的设定值,出现乱码是正常的,倒是不出现乱码那反倒是凑巧的。
再来看一下常见情况下这三个关键点的值以及在这种情况下这3个变量的值:
locale—-目前大部分Linux系统已经将utf-8作为默认locale了,不过也有可能不是,例如有些系统使用中文locale zh_CN.GB18030。在locale为utf-8的情况下,启动vim后encoding将会设置为utf-8,这是兼容性最好的方式,因为内部 处理使用utf-8的话,无论外部存储编码为何都可以进行无缺损转换。locale决定了vim内部处理数据的编码,也就是encoding。
文件的编码以及自动编码识别—-这方面牵扯到各种编码的规则,就不一一细讲了。但需要明白的是,文件编码类型并不是保存在文件内的,也就是说没有任何 描述性的字段来记录文档是何种编码类型的。因此我们在编辑文档的时候,要么必须知道这文档保存时是以什么编码保存的,要么通过另外的一些手段来断定编码类 型,这另外的手段,就是通过某些编码的码表特征来断定,例如每个字符占用的字节数,每个字符的ascii值是否都大于某个字段来断定这个文件属于何种编 码。这种方式vim也使用了,这就是vim的自动编码识别机制了。但这种机制由于编码各式各样,不可能每种编码都有显著的特征来辨别,所以是不可能 100%准确的。对于我们GB2312编码,由于其中文是使用了2个acsii值高于127的字符组成汉字字符的,因此不可能把gb2312编码的文件与 latin1编码区分开来,因此自动识别编码的机制对于gb2312是不成功的,它只会将文件辨识为latin1编码。此问题同样出现在gbk,big5 上等。因此我们在编辑此类文档时,需要手工设定encoding和fileencoding。如果文档编码为utf-8时,一般vim都能自动识别正确的 编码。
客户运行vim的终端所使用的编码类型—-同第二条一样,这也是一个比较难以断定的关键点。第二个关键点决定着从文件读取内容和写入内容到文件 时使用的编码,而此关键点则决定vim输出内容到终端时使用的编码,如果此编码类型和终端认为它收到的数据的编码类型不同,则又会产生乱码问题。在 linux本地X环境下,一般终端都认为其接收的数据的编码类型和系统locale类型相符,因此不需关心此方面是否存在问题。但如果牵涉到远程终端,例 如ssh登录服务器,则问题就有可能出现了。例如从1台locale为GB2310的系统(称作客户机)ssh到locale为utf-8的系统(称作服 务器)并开启vim编辑文档,在不加任何改动的情况下,服务器返回的数据为utf-8的,但客户机认为服务器返回的数据是gb2312的,按照 gb2312来解释数据,则肯定就是乱码了,这时就需要设置termencoding为gb2312来解决这个问题。此问题更多出现在我们的 windows desktop机远程ssh登录服务器的情况下,这里牵扯到不同系统的编码转换问题。所以又与windows本身以及ssh客户端有很大相关性。在 windows下存在两种编码类型的软件,一种是本身就为unicode编码方式编写的软件,一种是ansi软件,也就是程序处理数据直接采用字节流,不 关心编码。前一种程序可以在任何语言的windows上正确显示多国语言,而后一种则编写在何种语言的系统上则只能在何种语言的系统上显示正确的文字。对 于这两种类型的程序,我们需要区别对待。以ssh客户端为例,我们使用的putty是unicode软件,而secure CRT则是ansi 软件。对于前者,我们要正确处理中文,只要保证vim输出到终端的编码为utf-8即可,就是termencoding=utf-8。但对于后者,一方面 我们要确认我们的windows系统默认代码页为cp936(中文windows默认值),另一方面要确认vim设置的termencoding=cp936。
最后来看看处理中文文档最典型的几种情况和设置方式:
系统locale是utf-8(很多linux系统默认的locale形式),编辑的文档是GB2312或GBK形式的(Windows记事本 默认保存形式,大部分编辑器也默认保存为这个形式,所以最常见),终端类型utf-8(也就是假定客户端是putty类的unicode软件) 则vim打开文档后,encoding=utf-8(locale决定的),fileencoding=latin1(自动编码判断机制不准导致的),termencoding=空(默认无需转换term编码),显示文件为乱码。 解决方案1:首先要修正fileencoding为cp936或者euc-cn(二者一样的,只不过叫法不同),注意修正的方法不是:set fileencoding=cp936,这只是将文件保存为cp936,正确的方法是重新以cp936的编码方式加载文件为:edit ++enc=cp936,可以简写为:e ++enc=cp936。 解决方案2:临时改变vim运行的locale环境,方法是以LANG=zh_CN vim abc.txt的方式来启动vim,则此时encoding=euc-cn(locale决定的),fileencoding=空(此locale下文件 编码自动判别功能不启用,所以fileencoding为文件本身编码方式不变,也就是euc-cn),termencoding=空(默认值,为空则等 于encoding)此时还是乱码的,因为我们的ssh终端认为接受的数据为utf-8,但vim发送数据为euc-cn,所以还是不对。此时再用命令: set termencoding=utf-8将终端数据输出为utf-8,则显示正常。
情况与1基本相同,只是使用的ssh软件为secure CRT类ansi类软件。 vim打开文档后,encoding=utf-8(locale决定的),fileencoding=latin1(自动编码判断机制不准导致的),termencoding=空(默认无需转换term编码),显示文件为乱码。 解决方案1:首先要保证运行secure CRT的windows机器的默认代码页为CP936,这一点中文windows已经是默认设置了。其他的与上面方案1相同,只是要增加一步,:set termencoding=cp936 解决方案2:与上面方案2类似,不过最后一步修改termencoding省略即可,在此情况下需要的修改最少,只要以locale为zh_CN开 启vim,则encoding=euc-cn,fileencoding和termencoding都为空即为encoding的值,是最理想的一种情 况。 可见理解这3个关键点和3个参数的意义,对于编码问题有很大助力,以后就可以随心所欲的处理文档了,同时不仅仅是应用于vim,在其他需要编码转换的环境里,都可以应用类似的思路来处理问题解决问题。 最后推荐一款功能强大的windows下的ssh客户端—-xshell,它具有类似secure CRT一样的多tab 的ssh窗口的能力,但最为方便的是这款工具还有改变Term编码的功能,这样我们就可以不用频繁调整termencoding,只需在ssh软件里切换 编码即可,这是我用过的最为方便的ssh工具。它是商业软件,但非注册用户使用没有任何限制,只是30天试用期超出后会每次启动都提示注册,对于功能没有 丝毫影响。
备注:
最后看到ubuntu中文站上一个完美解决的方法:在.vimrc加两句设置
“设定文件编码类型,彻底解决中文编码问题
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
加上发现没有作用,那就是vim的哪个包没有安装,试试把包安完全一些。
vim的完全翻译版在下面连接处可以找到
http://vimcdoc.sourceforge.net/
可以下栽其中的一个PDF版本,里面介绍的很详细,强烈推荐:)
更详细的vim信息可以访问:
http://www.vim.org/
一个带有英文注释的.vimrc例子
http://www.vi-improved.org/vimrc.php
此文讲解的是vim编辑多字节编码文档(中文)所要了解的一些基础知识,注意其没有涉及gvim,纯指字符终端下的vim。