• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            花了點(diǎn)時(shí)間翻譯出來(lái),有些地方還不是很清晰明了,主要是有些功能還尚未使用。下載 project中文幫助(也 可以將下文保存成project.txt文件)放到vim的doc目錄中,覆蓋原來(lái)的英文幫助。如果你不想覆蓋,你可以把原來(lái)的幫助文件移動(dòng)到上層目錄或 其他地方,注意不要重命名放在doc目錄下,不然在使用helptags doc目錄產(chǎn)生tags時(shí)會(huì)提示tag重復(fù)的警告信息。以后使用: help project 出來(lái)的就是中文手冊(cè)了。時(shí)間倉(cāng)促,翻譯的不好,不當(dāng)或錯(cuò)誤之處敬請(qǐng)各位看官指出來(lái)。

            *project.txt*     一個(gè)用來(lái)管理多個(gè)項(xiàng)目及項(xiàng)目源代碼的插件

                    支持版本: Vim 6.x 及 Vim7.x
                    最后更新: 2006 年 10 月 13 日 星期五
                    翻譯更新: 2007 年 08 月 16 日 星期五

                            作者:Aric Blumer
                            譯者:Denven

                                          *project* *project-plugin*

                目錄:

                    1.命令..............調(diào)出插件.............|project-invoking|
                    2.繼承...........項(xiàng)目層層關(guān)系.........|project-inheritance|
                    3.映射.............插件映射..............|project-mappings|
                    4.添加映射.......為插件添加映射...|project-adding-mappings|
                    5.設(shè)置..............項(xiàng)目設(shè)置.............|project-settings|
                    6.樣例文件..........項(xiàng)目樣例..............|project-example|
                    7.技巧..............使用技巧.................|project-tips|
             

            使用這個(gè)插件的基本功能可以為你經(jīng)常訪(fǎng)問(wèn)的文件提供方便的瀏覽. 文件會(huì)在 Vim 左側(cè)
            窗口列出來(lái), 在文件名上按 <Return> 或者雙擊鼠標(biāo)就可以打開(kāi)相應(yīng)的文件. 這比使用
            |file-explorer| 去瀏覽多層目錄要更為便捷.

            也可在選擇一個(gè)文件時(shí)候去讓插件更改目錄, 執(zhí)行指定都 Vim 腳本. 這些腳本可以通過(guò)
            修改 $PATH 來(lái)設(shè)定編譯器等的環(huán)境. 這在進(jìn)行多項(xiàng)目開(kāi)發(fā)時(shí)可以讓 quickfix 工作在不
            同的環(huán)境中.

            其他特性:
                o 在項(xiàng)目中實(shí)時(shí)加載或卸載文件(\l, \L, \w, and \W)
                o 在項(xiàng)目中所有文件進(jìn)行全局搜索(\g and \G)
                o 對(duì)某一個(gè)文件單獨(dú)執(zhí)行用戶(hù)指定的腳本(可以利用這個(gè)特寫(xiě)來(lái)關(guān)聯(lián)一個(gè)文件到
                  某一個(gè)外部程序) (使用\1 到 \9)
                o 對(duì)所有文件執(zhí)行某個(gè)用戶(hù)指定的腳本(使用\f1-\f9 和 \F1-\F9)
                o 用戶(hù)高可定制性
                o 可以配合 |netrw| 插件使用 XXXX://... 管理遠(yuǎn)程項(xiàng)目. XXXX 代表 ftp,
                  rcp, scp, or http.

            可以在一個(gè)單獨(dú)的純本文件中或在 vimrc 中設(shè)置幾個(gè)全局量變進(jìn)行配置.

            必須在 |vimrc| 文件中 set 'nocompatible' 才能使用這個(gè)插件. 也可以通過(guò)設(shè)置變量
            "loaded_project" 來(lái)禁止插件被加載: >
                :let loaded_project = 1


            ==============================================================================
            COMMANDS                        *project-invoking*

            要使用本插件, 只需將其放置到 Vim 的插件目錄(~/.vim/plugin)即可. 參見(jiàn)
            "|add-global-plugin|", 在下次打開(kāi) Vim 時(shí), 輸入如下命令 >
                :Project
            或者 >
                :Project {file}

            如果沒(méi)有指定具體的項(xiàng)目文件, 那么會(huì)默認(rèn)使用$HOME/.vimprojects文件.

            命令: [g]vim +Project 可在 Vim 啟動(dòng)時(shí)同時(shí)自動(dòng)載入project插件窗口.

            調(diào)出項(xiàng)目窗口時(shí)每次只能使用某一個(gè)文件, 如果想更改項(xiàng)目, 在項(xiàng)目窗口中運(yùn)行:bwipe
            刪除項(xiàng)目緩沖, 然后用 :Project {file} 重新載入新的項(xiàng)目.


            可以在同一個(gè)文件中保留和顯示多個(gè)項(xiàng)目, 通過(guò) {} (c參見(jiàn) |fold.txt|) 來(lái)分隔. 在項(xiàng)目
            中可以有任意多個(gè)嵌套的折疊. {} 中的每一行被當(dāng)作一個(gè)文件名. 空行和 # 號(hào)后面的內(nèi)
            容將被忽略.

            插件使用 Vim 標(biāo)準(zhǔn)的折疊方式, 支持所有的 |fold-commands| . 例如雙擊折疊的首行可
            以打開(kāi)或關(guān)閉該折疊. 通過(guò)光標(biāo)定位到一個(gè)文件名后按回車(chē)鍵或者雙擊即可打開(kāi)該文件,
            插件會(huì)為在右側(cè)打開(kāi)一個(gè)新窗口來(lái)顯示(如果映射了 |CTRL-W_p|, 也是等價(jià)的).

                                              *project-syntax*
                                                       *語(yǔ)法*
            項(xiàng)目入口描述形式:
            project_entry ::=
                <Description>={projpath} [{options}] {
                [ filename ]
                [ project_entry ]
                }

            {options} 可以是下面的一項(xiàng)或者幾項(xiàng), 但必須放在同一行上.
                CD={path}
                in={filename}
                out={filename}
                filter="{pat}"
                flags={flag}

            注意: 一個(gè)項(xiàng)目入口可以包含在另一個(gè)項(xiàng)目入口里面,    這意味著可以在項(xiàng)目中設(shè)置層次關(guān)系.

            <Description> 項(xiàng)目描述. 不能含有"="字符. 在 =. 的兩邊不能有空字符. 它會(huì)顯示在折疊
            行上.

            {projpath} 項(xiàng)目路徑. 它指向項(xiàng)目文件所在目錄, 可以在里面使用環(huán)境變量. 如果是一個(gè)相
            對(duì)路徑, 插件會(huì)根據(jù)項(xiàng)目的父目錄及其上層目錄等層次建立路徑, 但最外層的項(xiàng)目入口必須
            是一個(gè)絕對(duì)路徑. 參見(jiàn)下面 |project-inheritance|的例子.可以在該項(xiàng)中使用空格, 但是要
            轉(zhuǎn)義. 下面的兩個(gè)例子是針對(duì)同一個(gè)目錄的:
            >
                Example=/my/directory/with\ spaces {
                }
                Example="/my/directory/with spaces" {
                }

            推薦在 Windows 上這樣使用: >

                Example="c:\My Documents" {
                }

            而 Vim 很聰明, 這樣做也是可以的: >

                Example=c:\My\ Documents {
                }

            CD= 表示在項(xiàng)目中選定一個(gè)文件時(shí) Vim 將要進(jìn)入的目錄(相當(dāng)于使用|:cd|). 這對(duì)在需要
            使用本地 Makefile 文件進(jìn)行編譯時(shí), 如|:make| 非常有用. 使用 CD=. 表示 Vim 將
            {projpath} 及其等價(jià)路徑設(shè)為當(dāng)前工作目錄. 如果不設(shè)置 CD 的值將無(wú)法中在項(xiàng)目中進(jìn)
            行目錄都切換, 注意 "=" 的兩邊沒(méi)有空格. CD 參數(shù)也可以是來(lái)自其父目錄下都一個(gè)相對(duì)
            路徑. 參考 |project-inheritance| 中的例子. 在使用 |netrw| 瀏覽項(xiàng)目時(shí)該指令將被
            忽略. 在 {projpath} 中可以使用空格.

            in= 和 out= 用來(lái)在進(jìn)入或者退出文件緩沖時(shí)執(zhí)行特定的 Vim 腳本. (參考 |BufEnter|
            和 |BufLeave| 自動(dòng)命令事件). 它可以使用 Vim 腳本來(lái)為項(xiàng)目設(shè)定或取消一定的環(huán)境.
            例如:

            in.vim: >
                let $PROJECT_HOME='~/my_project'
                " Put the compiler in $PATH
                if $PATH !~ '/path/to/my/compiler'
                    let $PATH=$PATH.':/path/to/my/compiler'
                endif

            out.vim: >
                " Remove compiler from $PATH
                if $PATH =~ '/path/to/my/compiler'
                    let $PATH=substitute($PATH, ':/path/to/my/compiler', '', 'g')
                endif

            在這種情況下, 在合適的環(huán)境下可以使用 :make 進(jìn)行編譯你正在編輯的文件. 如果腳本中
            使用的是相對(duì)路徑,  If the path to the script is relative, then it is
            relative from {projpath}.
            如果子項(xiàng)目沒(méi)有另行設(shè)定, 這些指令會(huì)被子項(xiàng)目繼承. 當(dāng)配合 |netrw| 插件使用時(shí), in=
            和 out= 中的路徑必須是絕對(duì)路徑.

            filter= 過(guò)濾符. 它指定一個(gè)全局的 |glob()| 文件匹配模式. 用于在使用 \r 時(shí)更新項(xiàng)目
            窗口中的文件列表. 由于可能含有多個(gè)文件匹配模式, 必須使用雙引號(hào)將過(guò)濾符號(hào)串?dāng)U起
            來(lái). 如果不設(shè)置過(guò)濾符號(hào), 插件默認(rèn)使用通配符 * 來(lái)當(dāng)做過(guò)濾符.注意"="前后不能含有空
            格. 如果子項(xiàng)目沒(méi)有指定具體的過(guò)濾符, 子項(xiàng)目將會(huì)繼承父項(xiàng)目的過(guò)濾符.

            flags= 標(biāo)識(shí)位 為某個(gè)折疊設(shè)置(啟用/取消)具體的特性. 為了記憶方便, 通常使用小寫(xiě)
            的表示關(guān)閉某一特性, 大寫(xiě)則表示開(kāi)啟某一特性. {flag} 參數(shù)可以使用下面的字符標(biāo)志位:

                  標(biāo)志位      描述 ~

                l    關(guān)閉由 \L 的遞歸. 對(duì)于子折疊的同樣也被關(guān)閉.

                r    關(guān)閉更新. 當(dāng)對(duì)折疊使用了\r or \R 后不要進(jìn)行更新.
                        它不影響子目錄的遞歸.

                S    為刷新和創(chuàng)建項(xiàng)目開(kāi)啟排序功能.

                s    關(guān)閉刷新和創(chuàng)建項(xiàng)目的排序功能.

                T    開(kāi)啟更新項(xiàng)目時(shí)折疊處于當(dāng)前折疊的正下方. 跟在全局變量
                    g:proj_flags 中使用標(biāo)志位等效, 但是不能針對(duì)多個(gè)折疊而言.

                t    關(guān)閉更新項(xiàng)目時(shí)折疊至當(dāng)前折疊區(qū)域的最頂部功能. 強(qiáng)制折疊到底部.

                w    關(guān)閉 \W 的遞歸. 對(duì)于子折疊的同樣也被關(guān)閉.


            在子項(xiàng)目不能沿用父項(xiàng)目中設(shè)定的這些標(biāo)志.

            只對(duì)當(dāng)前折疊生效, 折疊外的文字不受其影響.


            ==============================================================================
            INHERITANCE                         *project-inheritance*

            通過(guò)下面兩個(gè)項(xiàng)目文件的對(duì)比來(lái)理解層次的含義:
            >
                Parent=~/my_project CD=. filter="Make* *.mk" flags=r {
                 Child1=c_code {
                 }
                 Child2=include CD=. filter="*.h" {
                 }
                }

            Child1 的路徑是 "~/my_project/c_code", 因?yàn)?Child1 繼承了 ~/my_project. 它還
            繼承了 CD. 因?yàn)楦笇拥?CD=., 所以對(duì)于父層的當(dāng)前工作路徑是 "~/my_project". 那么
            Child1 繼承過(guò)來(lái)的 CD 也是"~/my_project". 最后, Child1 從父層繼承過(guò)來(lái)過(guò)濾符.
            而標(biāo)志位則是不能繼承的,除非單獨(dú)設(shè)置.

            Child2 只將 "~/my_project" 從父層繼承過(guò)來(lái).

            所以上述例子跟下面的展開(kāi)是等價(jià)的:
            >
                Parent=~/my_project CD=. filter="Make* *.mk" flags=r {
                 Child1=~/my_project/c_code CD=~/my_project filter="Make* *.mk" {
                 }
                 Child2=~/my_project/include CD=~/my_project/include filter="*.h" {
                 }
                }

            (在一個(gè)實(shí)際的項(xiàng)目中, Child1 一般不會(huì)希望從父層繼承過(guò)濾符號(hào), 該例子只是為了說(shuō)明
             這個(gè)概念而已), 使用 \i 可以顯示當(dāng)前光標(biāo)下項(xiàng)目的層次關(guān)系.


            ==============================================================================
            MAPPINGS                            *project-mappings*

            映射    動(dòng)作 ~

            \r    根據(jù)過(guò)濾符更新光標(biāo)處的項(xiàng)目.  更新項(xiàng)目, 每深入一層折疊縮進(jìn)一個(gè)空格.

                如果在一行最后使用了 "# pragma keep" (不含雙引號(hào)), 那么該行將保留,
                不會(huì)被在更新時(shí)被刪除. 當(dāng)使用 . 作為一個(gè)入口時(shí), 進(jìn)入當(dāng)前目錄進(jìn)行瀏覽
                相當(dāng)方便, 通常對(duì)于這個(gè)有用的入口你肯定想在更新時(shí)被保留.
             
                注意這個(gè)映射是 <LocalLeader>r, Vim 默認(rèn)使用 \ 作為|<LocalLeader>|.

                對(duì)于使用 |netrw| 瀏覽的項(xiàng)目不適用.

            \R    遞歸執(zhí)行 \r.
                對(duì)于使用 |netrw| 瀏覽的項(xiàng)目不適用.

            \c    創(chuàng)建一個(gè)項(xiàng)目. 要求用戶(hù)輸入 項(xiàng)目描述, 文件路徑, CD 參數(shù), 文件名匹配表達(dá)
                    式 |glob()|. 插件會(huì)根據(jù)這些信息在光標(biāo)下面建立一個(gè)項(xiàng)目的入口.

                對(duì)于使用 |netrw| 瀏覽的項(xiàng)目不適用.

            \C    為目錄及其子目錄下的文件遞歸創(chuàng)建一個(gè)項(xiàng)目.

            <Return>
                在前一窗口或者另外一個(gè)新窗口中打開(kāi)光標(biāo)處的文件. 如果光標(biāo)位于折疊上,
                按此鍵打開(kāi)或關(guān)閉折疊.

            <S-Return>
            \s
                跟 <Return> 一樣, 但會(huì)水平分割目標(biāo)窗口.   
                使用 <LocalLeader>s 主要是為那些不能識(shí)別 <S-Return> 的終端而提供的.

            \S
                加載所有文件到當(dāng)前窗口, 當(dāng)前窗口會(huì)被水平分割顯示所有文件.

            <C-Return>
            \o
                同 <Return> 在一個(gè)窗口中打開(kāi)當(dāng)前文件, 同時(shí)關(guān)閉其他所有打開(kāi)的窗口.
                該映射保證該文件是除項(xiàng)目窗口以外其他唯一的窗口.
                       <LocalLeader>o 主要是為那些不能識(shí)別 <C-Return> 的終端而提供的.

            <M-Return>
            \v
                同 <Return> 僅僅顯示文件內(nèi)容, 而光標(biāo)依然停留在項(xiàng)目窗口中.

            <2-LeftMouse>
                (Double-click) 雙擊鼠標(biāo)左鍵, 如果當(dāng)前光標(biāo)下是一個(gè)已經(jīng)展開(kāi)的折疊則關(guān)閉
                該折疊, 反之打開(kāi)該折疊. 如果當(dāng)前光標(biāo)下為一個(gè)文件名, 則在|CTRL-W_p|(前
                一窗口)或項(xiàng)目右側(cè)新窗口中打開(kāi)該文件.

            <S-2-LeftMouse>
                同 <S-Return>.

            <C-2-LeftMouse>
                同 <C-Return>.

            <RightMouse>
                根據(jù)變量的值 g:proj_window_increment 增加項(xiàng)目窗口的寬度, 反復(fù)點(diǎn)擊則為
                在原寬度
                        g:proj_window_width
                和增加后的寬度
                        g:proj_window_width + g:proj_window_increment
                之間切換.

                是否能夠切換原窗口和寬窗口, 或手動(dòng)改變窗口寬度均取決于全局變量
                g:proj_flags 中的標(biāo)志位 't' 是否設(shè)置. (參見(jiàn)|project-flags|).

                注意在其他窗口中單擊鼠標(biāo)時(shí)右鍵并不能自動(dòng)將光標(biāo)定位到項(xiàng)目窗口.
                在離開(kāi)項(xiàng)目窗口后, 項(xiàng)目窗口寬度會(huì)變回到原寬度 g:proj_window_width.

            <space> 同 <RightMouse>

            <CTRL-Up>
            \<Up>
                移動(dòng)文本或者折疊到當(dāng)前光標(biāo)的上一行. 在有的終端中可能無(wú)法識(shí)別此綁定而失效.
                <LocalLeader><Up> 主要是為那些不能識(shí)別 <C-Up> 的終端而提供的.

            <CTRL-Down>
            \<Down>
                移動(dòng)文本或者折疊到當(dāng)前光標(biāo)的下一行. 在有的終端中可能無(wú)法識(shí)別此綁定而失效.
                <LocalLeader><Down> 主要是為那些不能識(shí)別 <C-Down>.

            \i    在狀態(tài)欄中顯示光標(biāo)所在折疊完全解析和繼承的參數(shù). 
                這是專(zhuān)門(mén)為手動(dòng)進(jìn)入項(xiàng)目時(shí)進(jìn)行相對(duì)路徑和繼承參數(shù)的調(diào)試而映射的.

            \I    在狀態(tài)欄顯示光標(biāo)下文件名的全名(含路徑). 此功能是插件調(diào)用
                Project_GetFname(line('.'))函數(shù)來(lái)實(shí)現(xiàn)的.

            \1 - \9
                執(zhí)行在 g:proj_run{x} 指定的命令, {x} 是執(zhí)行命令入口的編號(hào).
                參考下文中的 g:proj_run1.

            \f1-\f9
                執(zhí)行 g:proj_run_fold{x} 中指定的命令, {x} 執(zhí)行命令入口的編號(hào), 命令只針
                對(duì)當(dāng)前項(xiàng)目層的文件. 參考下文中的|project-settings|.

            \F1-\F9
                執(zhí)行 g:proj_run_fold{x} 中指定的命令, {x} 是執(zhí)行命令入口的編號(hào). 對(duì)當(dāng)前
                項(xiàng)目層及其所有子項(xiàng)目的所有文件執(zhí)行命令. 參考下文中的 |project-settings|

            \0    顯示由 \1 到 \9 定義的命令.

            \f0    顯示由 \f1 到 \f9 和 \F1 到 \F9 所定義的命令. \F0 作用與此相同.

            \l    加載當(dāng)前項(xiàng)目中的所有文件到 Vim 中, 在加載過(guò)程中按任何鍵可以停止加載.

            \L    加載當(dāng)前項(xiàng)目及其子項(xiàng)目中的所有文件到 Vim 中. 請(qǐng)謹(jǐn)慎使用這個(gè)映射, 作者并
                    不建議在項(xiàng)目中含有成千上萬(wàn)的文件時(shí)使用該映射. (順便提一句, 我的項(xiàng)目中有
                5,300 多個(gè)文件!) 在加載過(guò)程中按任何鍵可以停止加載.

            \w    刪除當(dāng)前項(xiàng)目層次中的所有文件. (并非真正刪除文件, 只針對(duì)該項(xiàng)目組織而言.
                如果文件被修改, 會(huì)先保存文件.) 擦除過(guò)程中按任意鍵可以停止此操作.

            \W    刪除當(dāng)前項(xiàng)目層及其子層次中的所有文件. (并非真正刪除文件, 只針對(duì)該項(xiàng)目組
                織而言.    如果文件被修改, 會(huì)先保存文件.) 擦除過(guò)程中按任意鍵可以停止此操作.

            \g    搜索當(dāng)前項(xiàng)目層所有文件.

            \G    搜索項(xiàng)目所有層所有文件.

            \e    為先通過(guò) <Return> 選擇的項(xiàng)目文件設(shè)置環(huán)境變量. 例如在 \e 設(shè)定環(huán)境變量后,
                無(wú)需打開(kāi)項(xiàng)目中的任何文件便可用 :make 來(lái)進(jìn)行編譯.

            \E    使用 |file-explorer| 瀏覽光標(biāo)處目錄內(nèi)的文件. 不支持 netrw 時(shí)的項(xiàng)目管理.

            <F12>    當(dāng)在變量 g:proj_flags (參考 |project-flags|)中使用了標(biāo)志位 'g' 時(shí), 該鍵
                    用來(lái)切換打開(kāi)和關(guān)閉項(xiàng)目窗口. 可以在 vimrc 中進(jìn)行重新綁定. 例如將其映射到
                    <Leader>P:

                    nmap <silent> <Leader>P <Plug>ToggleProject

            注意由于使用 :help 時(shí)幫助窗口跟項(xiàng)目窗口有所沖突, 該插件通過(guò)重新映射 :help避免了
            這個(gè)問(wèn)題(在使用時(shí)你可能無(wú)法感覺(jué)出來(lái)).

            ==============================================================================
            ADDING MAPPINGS                      *project-adding-mappings*
            添加映射

            也可單獨(dú)在 $HOME/.vimproject_mappings 文件中設(shè)置自己需要的映射. 如果這個(gè)文件存
            在, 插件每次啟動(dòng)時(shí)候會(huì)執(zhí)行(source)它. 下例中定義了統(tǒng)計(jì)項(xiàng)目中入口數(shù)量功能的映射
            當(dāng)按下 \K (Kount, 這因?yàn)?C 與 K 諧音 :-):時(shí)候會(huì)顯示統(tǒng)計(jì)結(jié)果 >

                function! s:Wc()
                    let b:loadcount=0
                    function! SpawnExec(infoline, fname, lineno, data)
                    let b:loadcount = b:loadcount + 1
                    if getchar(0) != 0 | let b:stop_everything=1 | endif
                    endfunction
                    call Project_ForEach(1, line('.'), "*SpawnExec", 0, '')
                    delfunction SpawnExec
                    echon b:loadcount." Files\r"
                    unlet b:loadcount
                    if exists("b:stop_everything")
                    unlet b:stop_everything
                    echon "Aborted.\r"
                endif
                endfunction

                nnoremap <buffer> <silent> <LocalLeader>K :call <SID>Wc()<CR>

            下例在 $HOME/.vimproject_mappings 中實(shí)現(xiàn)了插件對(duì)perforce的整合:
            >
                function! s:DoP4(cmd)
                   let name=Project_GetFname(line('.'))
                   let dir=substitute(name, '\(.*\)/.*', '\1', 'g')
                   exec 'cd '.dir
                   exec "!".a:cmd.' '.Project_GetFname(line('.'))
                   cd -
                endfunction

                nmap <buffer> <silent> \pa :call <SID>DoP4("p4add")<CR>
                nmap <buffer> <silent> \pe :call <SID>DoP4("p4edit")<CR>
            <
            (注意我進(jìn)入文件所在目錄后才可以使用 $P4CONFIG 文件. 請(qǐng)參考關(guān)于 perforce 的文檔.)

            這就建立了使用映射 \pe 來(lái)檢查用于編輯的文件, 用 \pa 來(lái)將文件存儲(chǔ).


            下例中為 <Return> 在打開(kāi)某種特定文件時(shí)映射到一個(gè)外部程序來(lái). (該例中它調(diào)
            用 ee 來(lái)瀏覽jpg文件). 盡管看起來(lái)有些刻意, 但它還是有點(diǎn)用的.
            >
                let s:sid = substitute(maparg('<Return>', 'n'), '.*\(<SNR>.\{-}\)_.*', '\1', '')
                function! s:LaunchOrWhat()
                    let fname=Project_GetFname(line('.'))
                    if fname =~ '\.jpg$'
                    exec 'silent! !ee "'.fname.'"&'
                    else
                    call {s:sid}_DoFoldOrOpenEntry('', 'e')
                    endif
                endfunction
                nnoremap <buffer> <silent> <Return>   \|:call <SID>LaunchOrWhat()<CR>
            <
            該例中調(diào)用外部程序來(lái)查看后綴名為jpg的文件, 對(duì)其他文件則仍以原 <Return> 處理.

            ==============================================================================
            SETTINGS                            *project-settings*

            在 vimrc 文件中設(shè)定下述變量后, Vim 會(huì)在加載插件前先使用這些屬性從而不按照插
            件的默認(rèn)屬性進(jìn)行加載.

            g:proj_window_width
                插件項(xiàng)目窗口寬度.    默認(rèn)值: 24

                盡管插件不能完全成功地按照我預(yù)想的方式設(shè)定窗口的大小,但是這個(gè)變量在
                設(shè)定窗口大小時(shí)還是會(huì)起到很大的作用.

            g:proj_window_increment
                當(dāng)按空格鍵 <space> 或者單擊鼠標(biāo)左鍵 <LeftMouse >時(shí)項(xiàng)目窗口寬度增加量
                默認(rèn)值: 100 (參見(jiàn) |project-mappings|)

                                               *project-flags*
            g:proj_flags
                默認(rèn)值: "imst"
                這些標(biāo)志位可以用來(lái)控制插件的行為, 具體如下:

                   標(biāo)志位    描述 ~

                b    設(shè)置后將使用 |browse()| 通過(guò)瀏覽目錄來(lái)為 \c 和 \C 設(shè)定目錄.
                    默認(rèn)關(guān)閉, 因?yàn)榇翱跒g覽器本身不允許進(jìn)行目錄的選擇.

                c    設(shè)置后, 在項(xiàng)目窗口中打開(kāi)文件后會(huì)自動(dòng)關(guān)閉項(xiàng)目窗口.

                F    顯示浮動(dòng)項(xiàng)目窗口. 關(guān)閉窗口的自動(dòng)調(diào)整大小和窗口替換.
                    This allows placement between other windows that wish to share
                    similar placement at the side of the screen. 
                    在使用外部窗口管理器的時(shí)候很有用.

                g    設(shè)置后會(huì)將切換打開(kāi)和關(guān)閉項(xiàng)目窗口映射到 <F12> 上.

                i    設(shè)置后, 當(dāng)選擇打開(kāi)一個(gè)文件時(shí)會(huì)在命令行顯示文件名和當(dāng)前工作路徑.

                l    設(shè)置后, 項(xiàng)目插件在選擇一個(gè)要打開(kāi)的文件時(shí),使用命令 |:lcd| 替換默
                    認(rèn)的 |:cd| 命令去改變目錄. 在有了下面的 L 標(biāo)志位后, 此標(biāo)志已經(jīng)
                    用處不大.

                L    與標(biāo)志位 l 很相似. 不管緩沖是否被使用, 它通過(guò)安裝一個(gè)進(jìn)入/離開(kāi)
                    緩沖的自動(dòng)命令|:autocommand| 來(lái)確保當(dāng)前工作目錄更改到 CD 參數(shù)
                    指定的目錄.(|:lcd| 命令只能為窗口而不能為緩沖改變當(dāng)前工作目錄)

                m    在常規(guī)模式下開(kāi)啟 |CTRL-W_o| 和 |CTRL-W_CTRL_O| 映射, 使得當(dāng)前
                    緩沖區(qū)成為唯一可見(jiàn)的緩沖區(qū), 但是項(xiàng)目窗口仍然可見(jiàn).

                n    設(shè)置后將在項(xiàng)目窗口中顯示行號(hào).

                s    設(shè)置后將在項(xiàng)目窗口中使用語(yǔ)法高亮.

                S    設(shè)置后將在更新和創(chuàng)建項(xiàng)目時(shí)啟用排序.

                t    設(shè)置后將在按空格 <space> 或鼠標(biāo)右擊 <RightMouse> 時(shí)候進(jìn)行原窗口
                    和加寬窗口之間的切換. 參見(jiàn) See the entry for  in |project-mappings|.

                T    設(shè)置后,    子項(xiàng)目的折疊在更新時(shí)會(huì)緊跟在當(dāng)前折疊下方顯示(而不是其底
                    部).

                v    設(shè)置后將, 按 \G 搜索時(shí)用 :vimgrep 取代 :grep.

            g:proj_run1 ...  g:proj_run9
                    包含一個(gè)作用于文件的 Vim 命令, 參考前文中關(guān)于 \1 to \9 的映射.
             
                      %f 替換文件的全路徑和文件名
                      %F 替換文件的全路徑和文件名
                      is 替換文件的全路徑和包含空格的文件
                      %n 只替換文件名
                      %N 只替換包含空格的文件名
                      %h 替換項(xiàng)目主目錄
                      %H 替換包含空格的項(xiàng)目主目錄
                      %r 替換與 CD 目錄相關(guān)聯(lián)的路徑
                      %R 替換與包含空格的 CD 目錄相關(guān)聯(lián)的路徑
                      %d 替換 CD 目錄.
                      %D 替換包含空格的 CD 目錄
                      %% 未使用

                    例如, 如果在 vimrc 中做了如下設(shè)置, 在當(dāng)前光標(biāo)下按下 \3 時(shí)將調(diào)
                    出 gvim : >
                     let g:proj_run3='silent !gvim %f'
            <        其他的幾個(gè)例子: >
                     let g:proj_run1='!p4 edit %f'
                     let g:proj_run2='!p4 add %f'
                     let g:proj_run4="echo 'Viewing %f'|sil !xterm -e less %f &"
            <
                    在 Windows 系統(tǒng)中應(yīng)用單引號(hào)括住 %f, %h, %d 以避免 \ 引起的轉(zhuǎn)義.

            g:proj_run_fold1 ...  g:proj_run_fold9
                    包含一個(gè)作用于折疊內(nèi)文件的 Vim 命令. 參考前文中關(guān)于 \f1 to \f9
                        和 \F1 to \F9 的映射部分.$HOME/.vimproject_mappings
             
                    %f 替換文件名, %h 替換項(xiàng)目的主目錄, %d 替換 CD 目錄.
                    對(duì)應(yīng)多個(gè)文件名有兩種處理方式:

                    第一種(默認(rèn)的)處理方式使用 %f 替換所有的絕對(duì)文件名, 讓命令只執(zhí)
                    行一次;    第二種是讓命令針對(duì)每個(gè)非絕對(duì)文件名執(zhí)行一次, %f 每次只
                    替換一個(gè)文件名. 使用第二種方式時(shí), 須在變量 g:proj_run_fold{x}
                    的開(kāi)頭加上一個(gè)通配符 '*' (通配符 '*' 在運(yùn)行時(shí)將被自動(dòng)去掉.)

                    例如, 注意以下兩種方式的差異: >
                     let g:proj_run_fold3="*echo '%h/%f'"
                     let g:proj_run_fold4="echo '%f'"
            <
                    注意在Windows系統(tǒng)中, 需要用 '' 將 %f, %h, %c 括起來(lái), 否則路徑中
                    使用的 \ 會(huì)出問(wèn)題. 另一種辦法是把它們放在 |escape()| 函數(shù)中.


            ==============================================================================
            PROJECT EXAMPLE FILE                         *project-example*

            例子: 項(xiàng)目文件(~/.vimprojects): >

              1    My Project=~/c/project CD=. in=in.vim out=out.vim flags=r {
              2     Makefile
              3      in.vim
              4      out.vim
              5     GUI Files=. filter="gui*.c gui*.h" {
              6      gui_window.c
              7      gui_dialog.c
              8      gui_list.c
              9      gui.h           # Header file
             10     }
             11     Database Files=. filter="data*.c data*.h" {
             12      data_read.c
             13      data_write.c
             14      data.h
             15     }
             16     OS-Specific Files {
             17      Win32=. filter="os_win32*.c os_win32*.h" {
             18       os_win32_gui.c
             19       os_win32_io.c
             20      }
             21      Unix=. filter="os_unix*.c os_unix*.h" {
             22       os_unix_gui.c
             23       os_unix_io.c
             24      }
             25     }
             26    }

            (注意左側(cè)的行號(hào)不是文件內(nèi)容.)


            ==============================================================================
            插件技巧                             *project-tips*

            1.  先為項(xiàng)目創(chuàng)建一個(gè)入口: >

                Label=~/wherever CD=. filter="*.c *.h" {
                }
            <
                然后將光標(biāo)定位在折疊上按 \r, 腳本會(huì)自動(dòng)添加對(duì)應(yīng)目錄下所有 C 文件(本例中)
                到項(xiàng)目之中. 這與 \c 是等效的, 只是沒(méi)有對(duì)話(huà)框顯示.

            2.  可以在項(xiàng)目列表里隨時(shí)添加,刪除或排序項(xiàng)目文件.

            3.  當(dāng)項(xiàng)目窗口沒(méi)有打開(kāi)時(shí), 輸入 >
                :Project
            <   可以將其打開(kāi). (插件有自動(dòng)記憶功能, 而無(wú)需輸入具體的項(xiàng)目名稱(chēng).) 如果在
                g:proj_flags 變量中設(shè)定了 'm' 標(biāo)志位, 通過(guò)組合鍵 |CTRL-W_o| 可以重新打開(kāi)
                項(xiàng)目窗口. 毫無(wú)疑問(wèn), 這會(huì)關(guān)閉除當(dāng)前窗口之外的其他所有打開(kāi)的窗口.

            4.  往項(xiàng)目中添加新的文件. 例如添加 'more.c' 到項(xiàng)目中去, 只需在項(xiàng)目入口之中插
                入文件名后按 <Return> 鍵即可.

            5.  當(dāng)使用 |quickfix| 時(shí)候, 在文件名上按回車(chē)鍵 <Return> 并不會(huì)有效, 這樣的話(huà),
                將無(wú)法更改目錄, 運(yùn)行腳本. 解決辦法是在使用 |quickfix| 前用 \L 將所有文件
                載入到項(xiàng)目中去.

            6.  當(dāng)項(xiàng)目窗口因?yàn)榛蜷_(kāi)或閉的折疊顯得凌亂時(shí), 使用 |zM| 可以關(guān)閉所有的展開(kāi)折疊,
                讓項(xiàng)目窗口重新變得整潔如初.

            7.  對(duì)于高級(jí)用戶(hù), 可以嘗試插件提供如下幾個(gè)函數(shù):
                Project_GetAllFnames()
                返回一個(gè)折疊及其子項(xiàng)目(可選)下的所有文件名. 
                Project_ForEach()
                在為項(xiàng)目中的每個(gè)文件提供一個(gè)調(diào)用函數(shù)的接口.如何使用請(qǐng)參考上面的例子以
                及源代碼.
                Project_GetFname(line_number)
                在編寫(xiě)自己的映射時(shí)用來(lái)獲取文件名.

            8.  將光標(biāo)定位到項(xiàng)目插件窗口的鍵映射, 在 vimrc 文件中添加:
            >
                    nmap <silent> <Leader>P :Project<CR>
            <
            9.  項(xiàng)目入口中使用符號(hào)"."會(huì)調(diào)出|file-explorer|插件. 為了防止在更新時(shí)候刪除,
                在項(xiàng)目入口中加入:
            >
                 . # pragma keep
            <
            ==============================================================================
            致謝

                感謝下列朋友為我在此插件開(kāi)發(fā)過(guò)程中提供一些補(bǔ)丁:

                    Tomas Zellerin
                    Lawrence Kesteloot
                    Dave Eggum
                    A Harrison
                    Thomas Link
                    Richard Bair
                    Eric Arnold
                    Peter Jones
                    Eric Van Dewoestine

             vim:ts=8 sw=8 noexpandtab tw=80 ft=help:
            posted on 2007-11-19 19:09 Dr.Magic 閱讀(286) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99蜜桃臀久久久欧美精品网站| 久久国产精品免费一区二区三区 | 精品无码久久久久久久久久| 久久这里只有精品18| 久久天天躁狠狠躁夜夜躁2014| 精品久久久久久无码中文字幕| 国产高清国内精品福利99久久| 狠狠色丁香久久综合五月| 久久超乳爆乳中文字幕| 国产成人综合久久综合| 色综合久久中文综合网| 国产精自产拍久久久久久蜜| 久久精品亚洲福利| 久久亚洲精品国产亚洲老地址 | 欧美日韩精品久久久久| 理论片午午伦夜理片久久| 性高湖久久久久久久久AAAAA| 精品国产乱码久久久久软件| 亚洲综合精品香蕉久久网| 国产精品一区二区久久| 伊人久久精品线影院| 亚洲v国产v天堂a无码久久| 77777亚洲午夜久久多喷| 97精品国产91久久久久久| 99久久伊人精品综合观看| 国内精品久久久久影院一蜜桃| 亚洲国产精品嫩草影院久久 | 综合人妻久久一区二区精品| 伊人久久大香线蕉亚洲| 精品久久久久久中文字幕| 久久无码人妻精品一区二区三区| 中文国产成人精品久久不卡| 国产精品久久一区二区三区 | 日本久久中文字幕| 久久99国产综合精品女同| 精品久久久久久国产三级| 看久久久久久a级毛片| 久久国产成人午夜aⅴ影院 | 久久亚洲精品中文字幕三区| 亚洲午夜久久久| 国产福利电影一区二区三区,免费久久久久久久精 |