`
iamxi
  • 浏览: 191809 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

大家來學VIM(一個歷久彌新的編輯器)[九]

 
阅读更多

set 功能設定

 

本單元可說是 vi(m) 的微調功能,可依您個人的喜好做有限度的調整。由於 vim 做了相當的擴充,文內主要是述敘 vim 的設定,但 elvis 沒有的也會標明。但並不打算一網打盡,只說明重要、常用的部份,其它的可以 :h option-list 來查閱。Linux Journal 四月份(April, 2000)有一篇關於 configuring Vim 的文章,有興趣的朋友也可參考一下,不過依據的版本是 vim 5.5 版,而非最新的 5.6 版。

 

 

該在何處設定呢?

可在線上做設定,例如 :set ai 或 :set noai,ai 是 autoindent 的縮寫,這樣就可以馬上改變縮格的設定,但離開 vim 後就又恢復原狀。要永久設定就得設在設定檔中。 vim 的設定檔在:

~/.exrc
~/.vimrc
~/.gvimrc    GUI 版本
$VIM/vimrc
$VIM/gvimrc    GUI 版本

  • windows 版本則在 $VIM/_vimrc 及 $VIM/_gvimrc
  • 您要把 GUI 的設定設在 ~/.vimrc 也是可以的,但分開來可能對以後要修改時會比較找得到地方改。
  • 那 $VIM 在哪裡呢? /usr/share/vim 或 /usr/local/share/vim 這是編譯時就決定的,但可在 ~/.profie 或 ~/.bashrc 中另設。windows 版本可設在 autoexec.bat 中。
elvis 的則在:

~/.exrc
~/.elvislib/elvis.rc

  • windows 版本在 C:\Program Files\elvis\elvis.rc
  • 如果您的系統上同時有 vim 及 elvis,則使用 ~/.exrc 要小心,以免互相影響了設定。好處是可以把共同的設定設在 ~/.exrc 裡。
  • 拜託您一下!設在設定檔中時 set 前當然是不必冒號的。:-)


 

如何得知目前的設定

:set 或 :se  會顯示所有經過修改的部份,就是和預設值不一樣的部份。
:set all  顯示目前所有設定值內容。
:set option?  顯示 option 這設定的目前值。
:set option  直接線上設定,有些設定需加 = 後加上設定值內容。
:set nooption  取消該設定。

  • :set 後面是可以多重設定的。例如 :set autoindent noconfirm autowrite,這樣三種設定就會同時重設。

您當然可以改設定檔來改變設定值。在 vim 也可以使用 :opt[ion] 來直接線上設定,會列出目前的設定,在 set 這個字上按 Enter 即可改變設定,或就直接修改其值亦可,改完後按 :q 就可以了。在簡短說明處按 Enter 則會叫出該部份的說明檔給您參考,您說方不方便?改好後

:mk[exrc]    則會寫入 ~/.exrc 檔
:mkv[imrc]   則會寫入 ~/.vimrc 檔

當然您得先搞清楚您目前所在目錄在什麼地方,如果您是在家目錄啟動的那就不用擔心了,否則找不到您的新 .vimrc 可不要寫信來罵我。:-) elvis 可就沒這麼方便了,得自行修改 ~/.exrc 或 ~/.elvislib/elvis.rc


 

各種set功能說明

autoindent(ai)
自動縮排,也就是說如果本行是從第五個字元開始寫的,您按 Enter
後游標就會停在次行第五個字元處。預設是不打開的。

autowrite(aw)
檔案一有更動就會自動存檔。預設不打開。

background(bg)    <vim 才有>
可設成 dark 或 light,這是兩種不同的 highlight 顏色設定,詳見
$VIMRUNTIME/syntax/synload.vim。不過您要更動顏色的設定,最好
是設在 ~/.vimrc 或 ~/.gvimrc 中,原始檔最好不要去動她。

  • ㄟㄟㄟ,你從沒提過 $VIMRUNTIME 好不好!其實這是最近版本的 vim 為了不至安裝新版本時把舊版本的一些設定或 macro 檔幹掉,所以 $VIMRUNTIME 就是 $VIM/vimxx,xx 就是版本號碼啦!例如您使用的是 vim 5.6 版,那麼就是 $VIM/vim56。
backup(bk)
是否要 backup file。預設不打開。

writebackup(wb)    <vim 才有>
在寫入檔案前先備份一份,和 backup 的作用不盡相同,請
:h backup-table。預設是打開的,所以您如果不要 backup,那要關
掉的是這個項目,而不是 backup。但請先檢查一下您編譯時是不是
有編譯進去,請 :ver。

backupdir(bdir)    <vim 才有>
設定存放 backup file 的目錄。預設在所編輯的檔案之所在目錄。

binary(bin)    <vim 才有>
設在編輯二進位檔狀態,這是防止存二進位檔時把 EOL 也寫進二進位
檔,那就會悔不當初,如果是圖檔將會無法再觀看,如果是可執行檔就
無法執行了!因此預設是 off。

  • elvis 會自動判斷是否為二進位檔,而且會分成左右兩半,左半部會以 16 進位的方式顯示,右半部則是以 ASCII 的方式來顯示。
browsedir(bsdir)    <vim 才有>
瀏覽檔案的目錄,GUI 版本始有。預設是上一次瀏覽的目錄。就是 GUI
版本功能表上的 [File] -> [Open] 會打開的目錄。

cindent(cin)    <vim 才有>
寫 C 時很好用,indent 比一般敏感,專為 C 程式碼而設。預設 off。
編輯 C/C++ code 時會自動打開。

cmdheight(ch)    <vim 才有>
狀態列的行數,預設一行,建議設成兩行。

compatible(cp)    <vim 才有>
設為和原始 vi 相容的狀態,vim 的擴充功能會被抑制。預設 off。

confirm(cf)    <vim 才有>
各種確認動作。預設 off。

directory(dir)
swap 檔存放的目錄。前面單元已有說明。

fileformat(ff)   <vim 才有>
這是寫入檔案時置放 EOL(end of line) 的形式
dos 是以 0D 0A 來斷行。
unix 是以 0A 來斷行。
mac 是以 0D 來斷行。
預設以各系統平檯而定,在 Linux 當然是 unix 形式。

fileformats(ffs)    <vim 才有>
可指定多個,會依載入的檔案形式來調整 ff。
例如 :set ffs=unix,dos ff=unix
則預設為 unix 格式,但如讀入的是 dos 格式的檔案,會自動調整
為 dos 格式,這樣存檔時就會以 dos 格式存檔(狀態列會顯示)。
。此時如要改成 unix 格式,可 set ff=unix 然後存檔就會轉成
unix 格式,反之亦然。

  • 如果不這樣設,也就是您不管 ff 或 ffs 都設成 unix,那讀入 dos 格式的檔案時在每行尾會出現 ^M 這個字元(就是 0D 啦!)這時縱使 :set ff=unix 也來不及了!只好 :%s/^M//g 來消去這個 ^M。ㄟ,還記得怎麼替換嗎?就是把 ^M 換成沒有啦!而且 ^M 怎麼打出來的還記得吧!翻一翻前面的單元吧!
  • Hey,你怎麼知道是 0D 呀!好吧!告訴您一個密秘,您把游標移到 ^M 那個位置,然後按 ga 在狀態列就會顯示 10,16,8 進位的值。其它的字元也是可以如此顯示。a 就是 ascii 的意思。但這是 vim 的擴充功能,elvis 沒有。
  • elvis 縱使載入 dos 格式的檔案,也是會自動把 ^M 隱藏起來。
ignorecase(ic)
尋找時不分大小寫,這對中文會造成困擾。預設 off。

incsearch(is)    <vim 才有>
加強式尋找功能,在鍵入 patern 時會立即反應移動至目前鍵入之
patern 上。預設 off。

hlsearch(hls)    <vim 才有>
尋找時,符合字串會反白表示。預設 off。如果您是使用 vim 的
預設的 vimrc 檔的話,會設在 F8 鍵來切換。

textwidth(tw)
是一種 word wrap 的功能,從左起算之固定每行的最大字元寬度。
超過此寬度就會自動折行,這可是真的折行,也就是說在折行處會插
入 EOL。預設是 0,也就是沒有 word wrap 的功能。

wrapmargin(wm)
和 textwidth 作用相同,只是是從右視窗邊向左算起要幾個字元起
折行。預設是 0。textwidth 與 wrapmargin 的功能目前並不適用於
中文,打中文還是您自行按 Enter 吧!

wrap
這也是折行功能,可是只是螢幕效果的折行,實際上並沒有插入 EOL。

wrapscan(ws)
這和折行沒有關係,是指尋找時,找至檔尾時,是否要從檔首繼續找。
預設是要。

paste    <vim 才有>
這是防止在做剪貼時位置會不正確,前面單元已有說明。

ruler(ru)    <vim 才有>
會在狀態列顯示游標所在處之行列狀態,預設不打開,但建議打開。
最右邊之代號的意義如下:
Top  檔案第一行在螢幕可見範圍。
Bot  檔案最後一行在螢幕可見範圍。
All  檔案首尾皆在一個螢幕範圍內。
如非以上三種情形,則會顯示相對百分比位置。

statusline(stl)    <vim 才有>
狀態列顯示的格式,使用預設就可以了,如果您想騷包一下的話,那
就請您 :h stl。

shiftwidth(sw)
指由 >> 移動整行內容時,一次移動的字元寬度,一般是使用 Tab 的
值,但可由這個設定來改變。

tabstop(ts)
一個 Tab 鍵寬度。預設是 8 個字元寬度。最好不要隨便改,以免您寫
的東西由其它編輯器來閱讀時造成困擾,為解決這個問題,vim 有一種
softtabstop 的機制,在下一節會詳細說明。

showcmd(sc)
在狀態列顯示目前所執行的指令。

showmode(smd)
在狀態列顯示目前的模式,例如是 Insert mode 或是 Visual mode。
當然平常的 normal mode(commond mode)是不顯示的。

viusalbell(vb)    <vim 才有>
以螢幕閃動代替 beep 聲。

number(nu)
顯示行號。注意,冒號命令也有 :nu 這是顯示游標所在行的行號,您
嫌多打一個字的話,:# 也行。不過如果 ruler 打開的話,在狀態列本
就會顯示門前游標所在處的行列值。

list
這也可以算是一種模式,list mode。就是 Tab 的地方會以 ^I 顯示,
而行尾之 EOL 會顯示成 $。可以讓您清楚的知道 Tab 在哪裡,折行是
不是真的。

swapfile(swf)    <vim 才有>
是否需 swap 至磁碟。如果設為 noswf 的話,那將不會有 swapfile
產生,通通會載入在記憶體中。預設是要 swapfile。

fileencoding(fe)    <vim 才有>
首先先鼓掌一下,啪啪啪…,因為有支援 taiwan,也支援 XIM,也
就是說可以使用 xcin-2.5x 來作輸入,當然您用 xcin-2.3x 配合
XA 也是可以啦!目前支援簡繁中文、日文、韓文,unicode 尚未植
入。但前提是您要把 multi_byte 編譯進去,這在一開始就講過了。
預設是使用 ansi。set guifont 及 set guifontset 已在一開始講
過,在此就不重複了。

history(hi)
記錄冒號命令的歷史紀錄檔,就是可以用上下方向鍵叫出來的那鍋。
預設是 20 筆。


 

關於softtabstop(sts)

幾乎所有的 OS 及軟體都設定 Tab 就是 8 個字元長,這已經是個公認值,您硬要去改變它的話恐怕帶來許多不便,但實際上關於程式風格,許多人又認為 8 個字元太長了,幾個巢狀迴圈下來就需折行,反而不方便。因此 vim 體貼您,內建了 softtabstop 的功能,就是由 vim 來代您製造出一個假的 Tab,實際上是空白字元組成的 Tab。

舉個例子來說明比較清楚。

set softtabstop=4
set shiftwidth=4

這樣會由 4 個空白字元取代一個 Tab,您按 Tab 鍵 vim 就跳 4 格,需注意的是,如果您按了三次 Tab 鍵,那就是一個實際的 Tab 加上四個空白字元,可不是 12 個空白字元喔!是混合 Tab 及 space 的。

問題來了!那我要按真正的 8 字元的 Tab 時怎麼辦?簡單,還記得怎麼按特殊字元嗎? Ctrl-v Tab 或 Ctrl-v I 就可以了,那就是如假包換的 8 字元長之 Tab。當然,您按兩次 Tab 不就得了!:-)


 

關於折行

前面已說過 set wrap 就可以造成螢幕折行,可是卻會把一個英文單字折成兩半,實在很不雅觀。好了,vim 再體貼您一次,set linebreak(lbr) 就會避免這種問題發生,會在空白或標點符號的地方來折行,但也仍屬螢幕折行,並不會插入 EOL。這個功能目前在中文判斷上還是會出槌!:-(

分享到:
评论

相关推荐

    vim帮助文档-大家来学VIM(一个历久弥新的编辑器)

    大家来学VIM(一个历久弥新的编辑器)[一] 前言 监於仍有许多人还没找到顺手的编辑器,而许多想学 vi 的人又觉得无从下手,因此在此提出一些个人的心得,希望能对这些朋友有点帮助。或许也减少一点 FAQ 吧! ...

    《大家来学vim》-李果正

    Vim,全称Vi Improved,是从早期的Vi编辑器发展而来的一个高度可定制且功能丰富的文本编辑器,广泛应用于Linux、Unix和类Unix系统中,同时也支持Windows平台。 1. Vim的基本操作: - 启动与退出:学习如何启动Vim...

    学习vi和vim编辑器_第7版_中文+英文_PDF

    《学习vi和Vim编辑器(中文版第7版)》将说明使用这两种程序编辑文档的基础技巧,并讨论高级工具,例如交互式宏与扩展编辑器的脚本——我们的内容编写成容易遵循步骤操作的风格,成就本书的经典地位。读者将学到: ·...

    大家来学vim(简体-05).pdf

    大家来学vim(简体-05).pdf 鉴于仍有许多人还没找到顺手的编辑器,而许多想学 vi 的人又觉得无从下手,因此在此提出一 些个人的心得,希望能对这些朋友有点帮助。或许也减少一点 FAQ 吧! 真要深入的话,大多数的前辈...

    大家来学 vim pdf 中文

    "大家来学 Vim pdf 中文" 是一个专为中文用户设计的教程,旨在帮助初学者快速掌握Vim的基本操作和高级技巧。 1. **基础操作** - 启动与退出:了解如何启动Vim编辑器,以及在编辑模式和命令模式之间切换。例如,按...

    学习vi和vim编辑器.pdf_vim实用_vi_vim_

    1. **打开文件**:`vim 文件名` 命令用于打开一个文件进行编辑。 2. **移动光标**:`h`左移,`j`下移,`k`上移,`l`右移;数字与移动键组合可快速移动,如`4j`表示向下移动4行。 3. **删除文本**:`x`删除当前字符,...

    学习VI和VIM编辑器第7版中文

    **VI和VIM编辑器详解** VI(Visual Editor)是一款强大的文本编辑器,最初在1976年由Bill Joy为UNIX系统开发。随着时间的发展,VI的增强版本VIM(Vi Improved)应运而生,由 Bram Moolenaar 开发,并在1991年首次...

    基于C/C++语言的简易vim编辑器 仿vim编辑器

    # 基于C/C++语言的简易vim编辑器 仿vim编辑器 1. 编辑器下有normal和insert两种模式。默认为normal模式,按i键进入insert模式,按esc退出insert模式。 2. normal模式下按 h j k l键向左上下右移动光标。 3. normal...

    学习vim 编辑器 第7版

    "学习vim编辑器 第7版"显然是针对这个版本的Vim进行深入学习的资源,对于想要提升文本编辑效率的人来说,是非常有价值的。 在Vim中,用户可以快速地在命令模式、插入模式和可视模式之间切换,以执行不同的操作。...

    学习vi和Vim编辑器_CN.pdf

    - **利用Fugitive.vim进行Git集成**:Fugitive.vim是一个Vim插件,提供了丰富的Git命令集成,如提交、查看历史、分支管理等。 #### 结语 学习vi和Vim编辑器是一项非常有价值的投资,尤其是在从事软件开发工作时。...

    一个仿vim的文本编辑器

    【标题】:“一个仿vim的文本编辑器” 在IT领域,文本编辑器是开发者们日常工作中不可或缺的工具,它们用于创建、查看和修改各种类型的文本文件。Vim(Vi Improved)是一个高度可定制且功能强大的命令行文本编辑器...

    学习VI和VIM编辑器第7版中文

    将近三十年的时间里,vi一直是Unix与Linux采用的标准编辑器,从1986年开始,《学习vi和Vim编辑器》一直是第一线的vi导引手册。但三十年来,Unix已不再是三十年前的样子,这本书也不能一成不变。第7版的《学习vi和Vim...

    vim编辑器的rpm包

    在本案例中,"vim编辑器的rpm包"指的是一个打包为RPM格式的Vim软件,方便在支持RPM的Linux系统上进行安装。 RPM包的工作原理是将软件及其依赖关系打包成单一文件,以便于分发和管理。当用户运行`rpm`命令来安装这个...

    vim编辑器用户手册

    Vim编辑器的定制是一个很大的话题,用户可以学习如何通过vimrc文件来配置Vim,包括简单映射的设置、插件的安装、帮助文件的增加、选项设置等。此外,用户手册中还包括使用语法高亮的方法,这对于编程工作尤其重要。 ...

    笨方法学 Vim Script

    例如,你可以定义一个函数来自动缩进代码,然后通过快捷键轻松调用。 Vim Script 中的命令是其强大之处。它们允许你控制文本的操作,比如移动光标、删除文本、复制和粘贴等。例如,`:global` 命令可以用于在整个...

    Centos7 下安装VIM编辑器

    VIM 编辑器是一个功能强大的文本编辑器,它提供了很多有用的功能,例如语法高亮、自动补全、代码折叠等。 在 CentOS 7 中,我们可以使用 `yum` 包管理器来安装 VIM 编辑器。`yum` 是一个基于 RPM 包管理器的前端,...

Global site tag (gtag.js) - Google Analytics