1. 程式人生 > >Vim中特殊字元的讀寫詳解

Vim中特殊字元的讀寫詳解

一、檢視特殊字元

Vim中可見特殊字元會直接顯示,不可見特殊字元會顯示為該字元在命令列的輸入方式, 例如\r顯示為^M。通過:help digraph-table可看到所有Vim中可輸入的特殊字元, 該文件的第一頁如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

char digraph hex  dec  official name

^@   NU   0x00  0  NULL  (NUL)

^A   SH   0x01  1  START OF HEADING (SOH)

^B   SX   0x02  2  START OF TEXT (STX)

^C   EX   0x03  3  END OF TEXT (ETX)

^D   ET   0x04  4  END OF TRANSMISSION (EOT)

^E   EQ   0x05  5  ENQUIRY (ENQ)

^F   AK   0x06  6  ACKNOWLEDGE (ACK)

^G   BL   0x07  7  BELL (BEL)

^H   BS   0x08  8  BACKSPACE (BS)

^I   HT   0x09  9  CHARACTER TABULATION (HT)

^@   LF   0x0a  10  LINE FEED (LF)

^K   VT   0x0b  11  LINE TABULATION (VT)

^L   FF   0x0c  12  FORM FEED (FF)

^M   CR   0x0d  13  CARRIAGE RETURN (CR)

第一列為特殊字元,第二列為digraph(見下文),第三列為十六進位制表示, 第四列為十進位制表示,第五列為該字元的官方名稱。

顯示當前檔案的二進位制編碼可輸入: %!xxd,該命令會替換檔案內容!恢復:: %!xdd -r 。

二、通過digraph輸入

Vim中顯然沒有什麼特殊字元選擇工具,但提供了兩種輸入特殊字元的方式:

     1、通過兩個字元來輸入一個特殊字元(digraph)。

     2、直接通過編碼值(ASCII或Unicode)輸入。

其中digraph是一種類似雙拼的方法,連續輸入兩個字元來表示一個特殊字元。 需要先按下前導鍵<Ctrl-K>,例如在編輯模式下輸入:

?

1

<Ctrl-K>Rg

將會出現®字元,其中"Rg"是該字元的digraph(雙拼)。 所有的digraph可以通過:help digraph-table查詢。

三、通過字元編碼輸入

除了digraph,還可直接通過字元編碼來輸入它,該字元不需要在Vim的digraph-table中。 這種方式也是在插入模式下進行的,需要先按下前導鍵<Ctrl-V> (Windows下<Ctrl-Q>)。

 有下列5種方式:

      十進位制值ASCII:^Vnnn (000 <= nnn <= 255)

      八進位制值:^VOnnn 或 ^Vonnn (000 <= nnn <= 377)

      十六進位制值:^VXnn or ^Vxnn (00 <= nn <= FF)

      十六進位制BMP Unicode:^Vunnnn (0000 <= nnnn <= FFFF)

      十六進位制任何Unicode:^VUnnnnnnnn (00000000 <= nnnnnnnn <= 7FFFFFFF)

上述操作都是在Unicode字元編碼設定下進行的。例如:

?

1

<Ctrl-V>065

將會輸出A字元,65是它的ASCII編碼,而Unicode相容ASCII。

四、換行的搜尋/替換/輸入

換行在Vim中的行為很特殊也不夠一致,需要單獨討論一下。

首先區分一下\r和\n:

     前者是回車(Carriage Return),在Vim中可通過<c-k>CR輸入,顯示為^M。

     後者是換行(New Line),在Vim中通過<CR>(回車)鍵輸入,顯示為回車並換行;

所以對於Windows風格換行(\r\n)在Vim中會在每行結尾顯示^M。

替換

注意使用:s命令替換為換行(New Line)時,應當使用\r(相當於回車鍵)而不是\n。 例如將所有逗號替換為換行:

?

1

:%s/,/\r/g

如果使用\n則目標會被替換為空字元NULL(顯示為^@)。

將DOS風格換行(\r\n)的檔案轉為Unix風格換行(\n)其實很簡單,不需要手動查詢替換:

?

1

2

:set fileformat=unix

:w

搜尋

在搜尋模式(/)搜尋換行時仍然應當使用\n字元,因為Vim的換行(Unix風格)確實是\n而不是\r\n。例如:

?

1

/foo\nbar

可以匹配到所有的:

?

1

2

foo

bar

五、檢視不可見字元

除了特殊字元外,ASCII字元中還有大量的不可見字元,例如空格回車製表符等。 這些字元可以通過list變數來控制它們的顯示與否:

?

1

2

3

4

5

6

" 顯示隱藏字元

:set list

" 不顯示隱藏字元

:set nolist

" 設定顯示哪些隱藏字元

:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能有所幫助,如果有疑問大家可以留言交流。

相關推薦

Vim特殊字元

一、檢視特殊字元 Vim中可見特殊字元會直接顯示,不可見特殊字元會顯示為該字元在命令列的輸入方式, 例如\r顯示為^M。通過:help digraph-table可看到所有Vim中可輸入的特殊字元, 該文件的第一頁如下: ? 1 2 3

Cookie

ppi 新的 false size fcm 重復 () clipboard html4 Cookie的引文原意是“點心”,它是在客戶端訪問Web服務器時,服務器在客戶端硬盤上存放的信息,好像是服務器發送給客戶的“點心”。服務器可以根據Cookie來跟蹤客戶狀態,這對於需要區

C++文件

開始 建議 add ror 輸入 屬性 打開文件 tell .net 轉自:http://blog.csdn.net/kingstar158/article/details/6859379 在看C++編程思想中,每個練習基本都是使用ofstream,ifstream,f

[Erlang]Ets併發

ETS是Erlang內建的記憶體資料庫,可用於多程序共享資料,具有併發讀寫的效能,文章就這點展開探討,重點說說ets併發讀寫兩個引數的優缺點及適用場合。   比如新建一個person的ets表: ets:new(person, [set, public, named_table

C++ 檔案(七)(ofstream,ifstream,fstream)

void fileRead() { using namespace std; ifstream fin; /** qwer:asdf:zxc:1234: gfd:jkl:mnb: */ //開啟檔案 fi

C++檔案(ofstream,ifstream,fstream)

在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: #include <fstream> ofstrea

c++檔案

引數path字串包含欲開啟的檔案路徑及檔名,引數mode字串則代表著流形態。mode有下列幾種形態字串:r 開啟只讀檔案,該檔案必須存在。r+ 開啟可讀寫的檔案,該檔案必須存在。w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。w+ 開啟可讀寫檔案,若檔案存在則檔案長

C++ 檔案(ofstream,ifstream,fstream)

文章轉自:http://blog.csdn.net/kingstar158/article/details/6859379 這裡主要是討論fstream的內容: #include <fstream>  ofstream         //檔案寫操作

linux下aio非同步與例項

1.為什麼會有非同步I/O aio非同步讀寫是在linux核心2.6之後才正式納入其標準。之所以會增加此模組,是因為眾所周知我們計算機CPU的執行速度遠大於I/O讀寫的執行速度,如果我們用傳統的阻塞式或非阻塞式來操作I/O的話,那麼我們在同一個程式中(不用多執

C++檔案(ofstream,ifstream,fstream

在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: [java] view plain copy  p

C++文件(ofstream,ifstream,fstream)

for ase try and line 創建 als pac 控制臺 這裏主要是討論fstream的內容:1 #include <fstream> 2 ofstream //文件寫操作 內存寫入存儲設備 3 ifstream

Javascript的apply與call

選項 this 模式 div sun fun object 面向 傳遞     JavaScript中有一個call和apply方法,其作用基本相同,但也有略微的區別。  一、方法定義   1、call 方法   語法:call([thisObj[,arg1[, arg2[

JQuery$.ajax()方法參數(轉載)

瀏覽器 object 服務器 字符串 false type: 要求為String類型的參數,請求方式(post或get)默認為get。註意其他http請求方法,例如put和 delete也可以使用,但僅部分瀏覽器支持。timeout: 要求為Number類型的參數,設置請求超時時

JavaScript數組對象

稀疏數組 nsh isa 學習過程 bnf value 明顯 global sci Array對象即數組對象用於在單個變量中存儲多個值,JS的數組是弱類型的,所以允許數組中含有不同類型的元素,數組元素甚至可以是對象或者其他數組。 創建數組的語法 1、Array構造器 1

react native textInput的value屬性

hold eric 工作 als size 保持 chang 無奈 bsp TextInput用法就不多講了,主要記錄下遇到的一個怪問題。 背景:項目需要開發一個充值頁面,需要一個輸入框,然後幾個按鈕,輸入框是允許用戶自己輸入任意金額,按鈕是可以讓用戶快捷選擇金

在.net序列化xml方法的總結

port 單詞 創建 padding 在一起 sys base msd 屏幕 在.net中序列化讀寫xml方法的總結 閱讀目錄 開始 最簡單的使用XML的方法 類型定義與XML結構的映射 使用 XmlElement 使用 XmlAttribute 使用 Inner

TP5關聯模型的使用

php 關聯模型 tp5 首先是model裏,舉個例子,user.php<?phpnamespace app\rbac\model;use think\Model;class User extends Model{ public function roleusers() {

Android StudioGit和GitHub使用

可能 必須 窗口 gin 擁有 說明 詳細 對話 發現   一、Git和GitHub簡述    1.Git    分布式版本控制系統,最先使用於Linux社區,是一個開源免費的版本控制系統,功能類似於SVN和CVS。Git與其他版本管理工具最大的區別點和優點就是分布式;  

Django的request對象

當前 perm 請求 詳細 spa ati 用戶輸入 刪除 完整路徑 URLconf文件匹配到用戶輸入的路徑後,會調用對應的view函數,並將 HttpRequest對象 作為第一個參數傳入該函數。 下面說說HttpRequest對象: 他其實是一個實例對象,屬性有:

css偽類/偽元素

input 其他 中文 tro 網頁 單元 web link 語言 一、偽類和偽元素 偽類和偽元素都是用來修飾不在文檔樹中的部分,區別在於, 偽類用於當已有元素處於的某個狀態時,為其添加對應的樣式,這個狀態是根據用戶行為而動態變化的(如:hover/:active)。