<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 第?24?章?Vim 編輯器 **目錄** [](ch24.html#id3098541) [VIM 簡介](ch24s02.html) [命令](ch24s03.html) [配置文件](ch24s04.html) [模式行](ch24s04.html#id3098979) [模式介紹](ch24s05.html) [模式切換](ch24s06.html) [移動](ch24s07.html) [數字參數](ch24s08.html) [瀏覽](ch24s09.html) [標記](ch24s10.html) [編輯](ch24s11.html) [搜索和替換](ch24s12.html) [正則表達式](ch24s13.html) [寄存器操作](ch24s14.html) [宏](ch24s15.html) [插入模式下的快捷鍵](ch24s16.html) [鍵綁定、縮寫](ch24s17.html) [單詞補全](ch24s18.html) [命令模式](ch24s19.html) [折疊](ch24s20.html) [多欄窗口](ch24s21.html) [標簽頁](ch24s22.html) [文件管理](ch24s23.html) [加密](ch24s24.html) [版本](ch24s25.html) ## VIM 簡介 我們使用的大多數編輯器,都可以直接在編輯區輸入字符,并且能夠通過一些快捷鍵來完成一些控制功能,比如使用方向鍵移動光標,使用 `BackSpack` 或者 `Delete` 鍵刪除文字,使用 `PgUp` 和 `PgDn` 翻頁,使用 `Home` 和 `End` 來定位行首和行末…… 而Vim是一個帶模式的編輯器,同樣的按鍵,在不同模式下,具有不同的功能定義。例如 `h j k l` 在 _編輯模式_ 下輸入相應的字符,在 _普通模式_ 下卻相當于方向鍵的作用。 由于需要切換模式,Vim 的使用起來略顯繁瑣。不過優點也顯而易見:您只要把手安安穩穩的放在打字區就可以了,而不需要使用諸如方向鍵、排版鍵、小鍵盤等需要挪開雙手的鍵位,從而提高了您的效率和專注程度。事實上,Vim 的前身 Vi 誕生的時候,鍵盤上還沒有方向鍵、排版鍵和小鍵盤 ## 命令 使用 Vim 編輯文件: ``` vi [文件名] vim [文件名] ``` 教學模式: ``` vimtutor [語言] ``` vim 教程,相當于使用Vim編輯器以只讀模式打開教程文件。您無論對這個文件作了什么,都會在退出后恢復原來的樣貌。與只讀模式的區別在于,它不會沒有眼色的提醒您,現在的狀態為只讀模式。您可以使用它作一些練習 您可以指定教程文件的語言,如果使用本地語言(**ZH_cn**)出現亂碼,您可以嘗試使用英語 ``` vimtutor en ``` 使用 Vim 比較文件區別 ``` vimdiff [文件1] [文件2] [其它文件]…… ``` ## 配置文件 Vim 的全局配置文件為 `/etc/vim/vimrc` ,用戶配置文件為 `~/.vimrc` , `"` 起始的行為注釋行。我們提供的配置項,您直接加入配置文件就可以了 您可以先對 Vim 進行一些簡單的配置: **例?24.1.?Vim 配置 `/etc/vim/vimrc`** ``` "運行在非兼容(VI)模式下(命令模式下 TAB 補全) set nocompatible "設定文件編碼 set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 "開啟語法加亮 syntax on "配色風格 colorscheme pablo "簡潔啟動模式 set shortmess=atI "設定 GUI 選項 "set guioptions=gmrLtT m:菜單 T:工具欄 set guioptions=gmrLt "命令行高度 set cmdheight=1 "設定行距 ( GUI 界面中生效 ) set linespace=4 "顯示標尺 set ruler "自動折行 "set nowrap set wrap "按完整單詞折行 set nolinebreak "set linebreak "行寬(輸入時自動插入換行符) "set textwidth=80 set textwidth=0 "允許在 虛空間 內操作 (虛空間:不包含任何文本的空間。如換行符之后) "set virtualedit=all "禁止在 虛空間 內操作 set virtualedit= "設定 Tab 鍵縮進的空格數 set tabstop=4 "設定編輯器將多少空格視為一個縮進 set shiftwidth=4 "將縮進轉換為空格 "set expandtab "設定自動縮進(新行與前一行縮進相同) set autoindent "set noautoindent "插入模式下,“←”如何刪除光標前的字符:行首空白、換行符、插入點之前的字符 set backspace=indent,eol,start "命令行歷史紀錄 set history=500 "禁用增量搜索 set incsearch "set noincsearch "搜索時忽略大小寫 set ignorecase "set noignorecase "高亮顯示搜索結果 set hlsearch "設定折疊方式 "set foldmethod=manual "以下字符將被視為單詞的一部分 (ASCII): "set iskeyword+=33-47,58-64,91-96,123-128 ``` ### 模式行 也可以通過“模式行”將配置選項嵌入在普通文件中。打開此文件時,優先使用模式行中的配置: ``` # **vim:** filetype=sh foldmethod=marker autoindent expandtab shiftwidth=4 模式行可以寫在任意位置 但為了不影響文件功能,模式行通常寫在注釋中 模式行以 **vim:** 起始,前面至少要有一個空白字符(空格、換行符等) 模式行中的設置項以空格分隔 …… ``` 這種形式的缺點在于,不能在設置項后添加其它文本。如果有相關需要,可以使用另一種模式行: ``` <!-- **vim:set** filetype=html**:** 這里可以任意添加文本 --> ``` ## 模式介紹 Vim 常見的模式有: _普通模式_ 、 _插入模式_ 、 _命令模式_ ,另外我們也會經常用到 _可視模式_ 。 Vim 啟動時進入 _普通模式_ ;或者在其它模式下,按下 `Esc` 鍵,便可以回到普通模式。 使用 **vimtutor en** 命令進入教程,現在是普通模式。隨便按幾下 `j` 、 `k` 、 `l` 、 `h` 鍵,您會發現光標的位置發生改變。 按下 `i` 鍵,編輯器底部出現了 -- 插入 -- 或者 -- insert -- ,您進入了插入模式。隨便按幾下 `j` 、 `k` 、 `l` 、 `h` ,您會發現相應的字符出現在編輯區,現在還可以通過方向鍵來移動光標。可能您覺得使用方向鍵移動光標不是什么問題,但是習慣了 Vim 后,您反而會認為方向鍵太麻煩了,簡直不能容忍!好了,現在按下 `Esc` 鍵回到普通模式,我們又可以使用 `j` 、 `k` 、 `l` 、 `h` 來移動光標了。 在普通模式下,按下 `:` 鍵(也就是 Shift+; ),在編輯器底部出現了一個 : ,您進入了命令模式。在 `:` 后輸入一個命令 `new` ,回車后,編輯器被分割為上下兩欄。為了方便起見,我們在命令前加一個 **:** 來表示命令模式下輸入的命令,像這樣 ``` :vnew ``` 命令能夠以一些規則簡化,上面的命令也可以寫為這種形式 ``` :vne ``` 現在您的編輯區一定弄的四分五裂,您可以使用命令“**:quit**”來關閉當前欄,直接用簡寫就可以了 ``` :q ``` 這個命令是退出編輯器,如果編輯區被分成多欄,則是退出當前欄。 執行完一個命令(按下回車后),編輯器會自動回到普通模式。如果想不執行當前命令,直接回到普通模式,您可以按下 Esc鍵。 按下 `v` 鍵,您進入了可視模式,可以使用 `j` 、 `k` 、 `l` 、 `h` 移動光標,高亮選取文本 。 事實上,可視模式相當于高亮選取文本后的普通模式。 可視模式具有多種模式,以行為單位進行選取的可視行模式,使用 `V` 鍵進入(也就是 Shift+v );和以塊為單位進行選取的可視塊模式,使用 `Ctrl+v` 鍵進入。 ## 模式切換 好了,現在我們總結一下模式間切換的方法 | | | | --- | --- | | 其它模式 | 普通模式 | Esc | | 普通模式 | 插入模式 | i | 在光標前插入 | | I | 在行首插入 | | a | 在光標后插入 | | A | 在行末插入 | | o | 在當前行之下新建行 | | O | 在當前行之上新建行 | | r | 替換當前字符 | | R | 從當前字符開始替換 | | 普通模式 | 命令模式 | : | | 普通模式 | 可視模式 | v | 可視模式 | | V | 可視行模式 | | Ctrl+v | 可視塊模式 | ## 移動 在普通模式中,您可以使用以下方式移動光標 | | | | --- | --- | | k(上) | | h(左) | l(右) | | j(下) | 您可以使用其它更有效率的方式移動光標 **表?24.1.?** | | 向前 | 向后 | | --- | --- | --- | | 單詞 | w | b | | 單詞,包括特殊符號 | W | B | | 單詞詞尾 | e | | 單詞詞尾,包括特殊符號 | E | | 行 | 0 | $ | | 行首文字(不包括空格) | ^ | | 頁 | H | L | | 頁面中部 | M | 在其它模式中,您可以使用方向鍵移動光標,不過那樣比較麻煩,您可以在配置文件中綁定插入模式下的功能鍵 ``` noremap! <M-j> <Down> noremap! <M-k> <Up> noremap! <M-h> <left> noremap! <M-l> <Right> ……………… 作用范圍 鍵位 功能 ``` * 其中,**map!**綁定的鍵盤映射,作用于所有模式;**inoremap!**綁定的映射,僅作用于插入模式。 ## 數字參數 您也可以使用數字參數(普通模式),來重復執行。例如 ``` 100j ``` * 執行 100次 `j` 鍵,向下 100行 ## 瀏覽 **表?24.2.?** | | 向前 | 向后 | | --- | --- | --- | | 整頁 | Ctrl+f | Ctrl+b | | 半頁 | Ctrl+d | Ctrl+u | | 文件 | G | gg | | 按行號轉到相應行 | 行號 G | | 按百分比轉到相應的行 | 1~100% | | 按行卷動 | Ctrl+e | Ctrl+y | | 將光標所在行調整至頁面中間 | zz | | 統計字數 | g Ctrl+g | | 顯示位置信息 | Ctrl+g | | 刷新屏幕 | Ctrl+l | > 提示:`gg` 定位到文件首行, `V` 進入可視行模式, `G` 定位到文件末行,實現類似“全選”的功能。依次按下 `g`? `g`? `V`(Shift+v)? `G`(Shift+g) ## 標記 您可以在當前光標處作一個標記,以便快速返回 ``` m標記名稱 定義標記。標記名稱為一個字符 `標記名稱 返回標記 mx 將當前光標處定義為標記 x `x 返回標記 x :marks 查看標記列表 ``` ## 編輯 | | 復制 | 剪切 | | --- | --- | --- | | 字符 | y![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png) | x | | 行 | yy | dd | > [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch24s11.html#vim-ed11) 需先在可視模式中選取 | | | | --- | --- | | p | 在光標后粘貼 | | P | 在光標前粘貼 | | u | 撤消 | | Ctrl+r | 重做 | | Ctrl+y | 逐字克隆上一行內容 | | Ctrl+e | 逐字克隆下一行內容 | ## 搜索和替換 按下 `/` 鍵,編輯器底部會出現 `/` 符號,接著輸入字符串,便可以進行搜索 | | | | --- | --- | | / | 向下搜索 | ? | 向上搜索 | | n | 搜索下一個 | N | 搜索上一個 | | | | | --- | --- | | :s/源字符串/目標字符串 | 將源字符串替換為目標字符串 | | :s/源字符串/目標字符串/g | 替換當前行中所有符合條件的字符串 | | :行號1,行號2s/源字符串/目標字符串/g | 在指定行中進行替換 | | :%s/源字符串/目標字符串/g | 全文替換 | ## 正則表達式 見[第?26?章 _正則表達式_](ch26.html "第?26?章?正則表達式") ## 寄存器操作 Vim 可以將不同字段剪切或復制到不同寄存器中,您可以從不同寄存器中取出內容后粘貼 ``` "寄存器名稱 ``` * 按下`"`鍵和另一個字符鍵,便可以定義一個寄存器。例如:`"a`?`"1` 定義寄存器后直接進行操作 ``` "ayy 將當前行復制到寄存器 a 中 "ap 將寄存器 a 中的內容粘貼到光標之后 ``` * **:registers** 查看所有寄存器的內容 * 通常情況下,寄存器 **+** (先按",再按 Shift+= )對應 X 下的剪貼板。您在其它程序中復制的內容,可以使用 `"+p` 粘貼到 Vim中;您在 Vim 中,可以使用 `"+y` 將內容復制到剪貼板,再粘貼到其它程序中 * 沒有指定寄存器時,Vim 使用“無名寄存器”存儲內容 ## 宏 您可以將一系列的操作錄制為一個宏,然后執行它 ``` q宏名稱 開始錄制宏。宏名稱為一個字符 q 錄制中按下“q”鍵,結束錄制 @宏名稱 執行宏 ``` * 可以使用 **:registers**(寄存器列表) 命令查看已記錄的宏 ## 插入模式下的快捷鍵 | | | | --- | --- | | Ctrl+r寄存器名稱 | 插入指定寄存器內容 | | Ctrl+k(2個字符) | 輸入二合字符 | | Ctrl+v數字 | 通過數字編碼輸入字符 | | Ctrl+v鍵位 | 輸入鍵位的名稱 | ## 鍵綁定、縮寫 前面我們已經向您介紹了鍵綁定 ``` map! <M-j> <Down> ``` 尖括號及其中的內容,為 Vim 配置文件的約定,分別描述了按鍵和功能,表示將功能編寫到按鍵上。如果綁定的只是普通字符,例如: ``` map! xxx XXXXX ``` 表示將 XXXXX 綁定到 xxx 上。當您鍵入 xxx 時,編輯器會自動替換為 XXXXX 如果您只是想將字符串綁定為縮寫,方便輸入,我們建議您使用 **iabbrev** 來綁定。例如: ``` iabbrev g google ``` 在插入模式下鍵入 `g` ,編輯器會自動替換為 google 。您可以將 **iabbrev** 命令縮寫為 **iab** ,例如: ``` iab g google ``` 以上命令,您可以直接在命令模式下輸入,臨時啟用。也可以寫入配置文件,永久啟用。 ## 單詞補全 ``` <Ctrl+n> 下一個匹配項 <Ctrl+p> 上一個匹配項 ``` 您可以在配置文件中定義補全的方式 ``` "自動補全方式:(使用逗號分隔) set complete=k,. " . 當前文件 " b 已被裝緩沖區,但是沒有在窗口內的文件 " d 在當前的文件中定義和由 #include 包含進來的文件 " i 由 #include 包含進來的文件 " k 由 dictionary 選項定義的文件 " kfile 名為{file}的文件 " t 標記(tags)文件 " u 沒有載入的緩沖區 " w 在其他窗口中的文件 "設定自動補全字典 : set dictionary=path ``` ## 命令模式 前面介紹了普通模式和插入模式。我們發現,普通模式主要用來瀏覽和修改文本內容,而插入模式則用來向文本中添加內容。 而命令模式則多用于操作文本文件(而不是操作文本文件的內容),例如保存文件;或者用來更改編輯器本身的狀態,例如設定多欄窗口、標簽或者退出編輯器…… w(rote) 將更改寫入文件 ``` :w ``` q(uit) 退出編輯器 ``` :q ``` 某些情況下,編輯器會阻止命令的執行。例如您修改了文件,而沒有保存,那么您使用 :q 命令退出時,編輯器就不會執行這條命令,而是提醒您保存文件。 這個時候,您可以在命令末尾追加 ! 來強制執行命令 ``` :命令! ``` 例如 `:q!` ,即便您沒有保存已修改的文件,使用此命令,編輯器也會放棄修改而強行退出 以 `!` 引導一個 Shell 命令,則可以從 Vim 臨時切換到 Shell 中,執行一個 Shell ``` :!命令 ``` 例如 `:!ls` 命令模式還可以用來調節一些選項,例如 ``` :set linespace=6 ``` * 使用 Tab 鍵補全命令 * 命令可以直接寫入配置文件 * 在選項后加上一個 `&` 使用默認值,例如: `:set linespace&` ## 折疊 | | | | --- | --- | | zf數字 | 創建折疊,數字參數為折疊行數 | | zo | 打開折疊 | | zc | 關閉折疊 | | zd | 刪除折疊 | | :set foldcolumn=4 | 顯示折疊樹 | | :mkview | 保存折疊 | | :loadview | 讀取折疊 | | zr | 打開同一層級所有折疊 | | zm | 關閉同一層級所有折疊 | | zO | 打開某一行的所有層級折疊 | | zC | 關閉某一行的所有層級折疊 | | zR | 打開所有折疊 | | zM | 關閉所有折疊 | | :set foldclose=all | 光標離開折疊自動關閉 | | :set foldopen=all | 光標遇到折疊自動打開 | 您可以在配置文件中定義折疊的方式 ``` "設定折疊方式 set foldmethod=manual " manual 手動折疊 " indent 按縮進折疊 " marker 按標記折疊 " syntax 按語法折疊 " expr 按表達式折疊 ``` 按標記折疊的例子: ``` #起始標記 **{{{** 將標記放到注釋里,不會影響文件的功能 起始標記和結束標記之間的內容折疊 顯示為起始標記所在行 #結束標記 **}}}** ###### 將折疊方式寫到模式行里 ##### # vim: foldmethod=marker ``` ## 多欄窗口 您可以使用以下命令,將當前窗口水平分為兩欄 ``` :new ``` 新建一欄空白窗口,將當前文件分兩欄顯示 ``` :split ``` 同理,您可以使用下列命令,將當前窗口垂直分為兩欄 ``` :vnew :vsplit ``` 先按下 `ctrl+w` 鍵,再按下方向鍵 `j` 、 `k` 、 `l` 、 `h` ,您可以切換到其它欄;在當前欄中使用 `:q` 命令,可以退出當前欄,也可以使用其它命令,對當前欄作出修改 如果您希望當前命令在所有欄中生效,您可以在命令的末尾追加 **all** ``` :命令all ``` 例如:`:qall` 如果您希望這條命令強制執行,那么 `!` 位于命令的最末,例如:`:qall!`?強行退出所有欄窗口 ## 標簽頁 Vim 在7以后的版本,開始支持標簽頁的功能 ``` :tabnew 新建一個標簽 :tabnext 轉到下一個標簽 :tabprevious 轉到上一個標簽 ``` 您也可以使用鼠標點擊標簽進行切換 ## 文件管理 使用 Vim 編輯目錄時,會進入文件管理模式: ``` vim . ``` 文件管理模式中可以實現一些簡單的文件管理功能: | | | | --- | --- | | enter | 打開文件或文件夾 | | Ctrl+o | 后退 | | o | 新開一欄進行編輯 | | O | 在前一次打開的欄中編輯 | | p | 預覽 | | i | 顯示/隱藏文件大小、日期 | | s | 切換文件排序方式 | | r | 切換順序、逆序 | | - | 回到上一級目錄 | | c | 將 Vim 執行目錄設定為當前目錄 | | R | 重命名 | | D | 刪除 | | x | 運行 | * **:cd** 設定所有窗口執行目錄 ; **:lcd** 設定當前欄窗口執行目錄 ## 加密 使用 **:X** 命令為文件設定一個密碼 ``` :X Enter encryption key: ****** Enter same key again: ****** ``` * 如果要取消加密,可以設置密碼為空 可以禁用交換文件,以免泄密 ``` vim -x -n file.txt ``` 如果你已在經編輯這個文件了,那么交換文件 `swapfile` 可以用下面的命令禁止: ``` :setlocal noswapfile ``` 由于沒了交換文件,文件復原就不可能了。為了避免失去編輯的成果,要比平時更勤快地存盤你的文件 現在你可以像平時一樣編輯這個文件并把你所有的秘密放進去。當你編完文件要退出 Vim 時,這個文件就被加密存盤了 當你下次用 Vim 編輯這個文件時,它就會詢問你密碼 如果你試圖用另一個程序來閱讀這個文件,你將讀到一堆垃圾。如果你用 Vim 來編輯這個文件,但輸入了錯誤的密碼,你也只能得到垃圾。Vim 并不具備檢驗密碼正確性的機制 (這一點使得破譯密碼更為困難) ## 版本 在 Windows 平臺下,請使用 gvim7ole 版本
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看