下面的問題與將Vim中的文本複製到其他內容(比如Web瀏覽器)有關。在vim中展開文本
我編輯文件時通常會有tw=80
選項,特別是LaTeX文件。但是,假設我想用tw=80
選項在Vim中撰寫電子郵件,然後我想將其複製並粘貼到Web瀏覽器。在複製和粘貼之前,我想打開文本,以便每隔80個字符就不會出現換行符。我嘗試過tw=0
,然後gq
,但這只是將文本包裝爲80個字符的默認寬度。我的問題是,如何解開文本,以便我的電子郵件的每個段落都顯示爲單行?有一個簡單的命令嗎?
下面的問題與將Vim中的文本複製到其他內容(比如Web瀏覽器)有關。在vim中展開文本
我編輯文件時通常會有tw=80
選項,特別是LaTeX文件。但是,假設我想用tw=80
選項在Vim中撰寫電子郵件,然後我想將其複製並粘貼到Web瀏覽器。在複製和粘貼之前,我想打開文本,以便每隔80個字符就不會出現換行符。我嘗試過tw=0
,然後gq
,但這只是將文本包裝爲80個字符的默認寬度。我的問題是,如何解開文本,以便我的電子郵件的每個段落都顯示爲單行?有一個簡單的命令嗎?
轉到你開始一段,然後輸入:
v 我 p Ĵ
對於整個文檔與規範結合起來:
:%norm vipJ
該命令將只展開段落。我想這是你想要的行爲。
由於使用正常模式命令加入段落行已經被 覆蓋了另一個答案,讓我們考慮通過 面向行的Ex命令解決同一問題。
假設光標位於段落的第一行。然後到 解開它,人們可以簡單地加入下一行,直到最後一行 那一段。一個方便的方法是運行:join
命令 正是爲此目的而設計的。要定義 命令的行範圍,除了當前行的明顯起始行外,還需要 來指定結束行。可以使用 匹配段落的最後一個,即換行符 後面的空行來找到它。因此,翻譯說,定義爲EX-命令語法,我們 獲得:
:,-/\n$/j
對於所有段落被解開,就 每個段落的首行運行此命令。一個有用的工具來跳過它們,重複給定的 操作順序是:global
命令。由於:global
掃描行從 從上到下,段落的第一行只是其餘未處理的行中的第一個非空行 。這個觀察結果給我們提供了命令
:g/./,-/\n$/j
它比它的簡單正常模式對應物更有效率。
這個命令有一個小錯誤:如果你有一行的段落,它會粘到下一段的開始。 –
@奧馬爾:非常棒,謝謝!答案已經更新,以解決這種情況。 –
我在@ fatih的回答中是這麼做的,但由於某些原因,將很短的段落連接在一起,所以我來到這裏尋找替代品,這很好,謝謝! – dbmrq
:%norm vipJ
的問題在於,如果連續行少於80個字符,它們也會加入它們,即使它們被空行分隔。比如下面的例子:
# Title 1
## Title 2
將變爲:
# Title 1 ## Title 2
在IB的答案,這個問題是列表:
- item1
- item2
變爲:
- item1 - item2
謝謝到this forum post我發現實現這一目標,我包裹在很多工作對我來說更好,因爲它不會做任何的一個函數的另一種方法:
function! SoftWrap()
let s:old_fo = &formatoptions
let s:old_tw = &textwidth
set fo=
set tw=999999 " works for paragraphs up to 12k lines
normal gggqG
let &fo = s:old_fo
let &tw = s:old_tw
endfunction
編輯:更新的方法,因爲我意識到這是不工作一個Linux設置。如果這個較新的版本不適用於MacVim(我無法測試),請刪除包含fo
的行。
謝謝!我想這是最簡單的方法呢?我認爲這對於整個文檔都沒有影響嗎? – Ray
@Ray我編輯了我的答案並添加了對整個文檔執行的命令。 –
在這種情況下,最好在'''-specifier'中使用':normal'命令以避免與自定義映射發生衝突。 –