2011-08-06 24 views
2

換行符我想在vim顯示一些(任意)特殊字符作爲換行符<CR>。 到目前爲止,我試圖誤用(當然極端的濫用:)非易碎空間打字顯示一些特殊的字符作爲在vim

:set list listchars=nbsp:<CR>

不工作,似乎是因爲該命令不接受<CR>。 有什麼我可以用在這裏的<CR>? \ r也沒有工作。

請注意,我不想要編輯的文本文件。目標是將行塊(一些相關代碼)視爲與vim動作相關的單行,但顯示爲多行。在這些情況下,特殊字符(待定義)僅用於將此塊結構保存在替換換行符的文件中。

+0

另一個想法是使用vim的wrap功能,它的配置使得它打破了任何一個字符比一個字符長的情況,但只有在遇到特殊字符的時候。 breakat選項可以用來定義這個特殊字符。但我的第一個難點在於「:set textwidth = 1」不會縮短行數,正如我所期望的那樣。 – rembremading

+0

看來,textwidth選項隻影響格式化而不影響(軟)包裝,這是我暗示的。對於:wrap命令還是一個告訴它總是在給定的字符處中斷的選項,是否有類似的選項? – rembremading

+0

您能否提供一個更廣泛的問題背景?通過將單條物理線顯示爲多條顯示線,您嘗試解決什麼問題? –

回答

0

我想你可能想看看this vimcasts episode。可能不完全是你想要的,但可以讓你到那裏。祝你好運!

0

我的解決辦法,最終,被插入非中斷空格和換行的文件中的相應位置。然後可以使用:set list listchars=nbsp:$來顯示這些'特殊線段'。它們的存在允許解釋代碼來識別由該組合分隔的線段作爲相關線段。

當然這並不回答這個問題。根據我現在所知,答案是:set list:wrap都不能用來實現這一點。

1

鑑於您在附加 評論了問題的大背景,我建議以下解決方案。通過縮進,語言的語法或標記摺疊編碼的行依賴於 。任何這些 三種方法都是自動的,不需要手動創建摺疊。哪一個 取決於你使用的語言。如果您需要摺疊幫助,請參閱:help foldmethod,或詢問 我的評論。

除非您使用的語言的語法在Vim中有廣泛的支持,否則最便利的方法是使用摺疊標記或定義表達式來計算每行的摺疊級別。前一種方法意味着圍繞每一組行摺疊特殊的文本標記(可以在註釋中包含 而不打破語言的語法規則)。默認情況下,這些標記是{{{}}};請參閱:help fold-marker:help foldmarker至 瞭解如何更改它們。使用

:set foldmethod=marker 

啓用這種摺疊模式。

定義的表達式來計算摺疊級別爲每一行是更 靈活的方法。它允許使用任何邏輯(可以用Vim 腳本表示)來確定摺疊級別。例如,摺疊線的基團 開始於單個空間使用

:set foldmethod=expr 
:set foldexpr=getline(v:lnum)[0]=='\ ' 

進一步的細節參見:help fold-expr上定製倍的表達。

當相互依賴的行被分組爲摺疊時,您可以很容易地將摺疊傳遞給過濾器程序。將光標移動到目標內部的一行 摺疊,然後鍵入[zV]z!(選擇整個摺疊)並輸入命令以 運行。爲了節省打字,你可以定義映射

:nnoremap <leader>z [zV]z! 

或者,如果命令是始終不變的,

:nnoremap <leader>z [zV]z!cat -n<cr> 

(替代cat -n - 我的例子命令 - 爲您定製一個)。

+0

http://stackoverflow.com/suggested-edits/87509 – thirtydot

+0

@rembremading:請讓我知道這個解決方案是否適合你。 –

+0

自「8月7日」以來,他一直沒有見過,他的建議編輯說「評論不再有效」,這意味着他不再使用同一個帳戶。所以,你的答案几乎肯定不會被接受。 – thirtydot