題 Vim用引號括起來


說我有以下內容

printf(text goes here);

我在視覺模式中選擇“文字在這裡”...
如何快速將其更改為

printf("text goes here");

4
2017-07-12 19:20


起源




答案:


這是為了回答您提出的具體問題。您聲明您已經在視覺上選擇了一些文本,並希望用引號括起來。為此,運行:

:s/\%V\(.*\)\%V/"\1"/

把它分成幾部分:

  • : 允許你進入 ex 命令。

  • s/old/new/ 是通常的替代命令。

  • \%V 是一個記錄不足的原子,用於標記所選文本的開頭

  • \(.*\) 選擇所有內容並將其保存到選擇1中。

  • 第二 \%V 表示所選文本的結尾。

  • 替換文本是所選擇的每個文本,存儲在其中 \1,用引號括起來: "\1"

此命令逐行應用。因此,如果所選文本擴展到多行,則可能會得到不需要的結果。


5
2017-07-12 21:31



我認為有一個錯誤。 printf(text goes here); 變 printf("text goes her"e);。 - Cristian Ciupitu
@CristianCiupitu我不清楚這是不是 vim 錯誤與否。無論哪種情況,一個簡單的解決方法是突出顯示一個額外的字符。 - John1024
為了記錄,我使用了vim-enhanced-7.4.179-1.fc20.x86_64。 - Cristian Ciupitu
@CristianCiupitu @ John1024%V只是匹配光標前的選擇,因此如果 e 是選擇中的最後一個字符,然後第二個%V不在選擇內,忽略最後一個 e。 - Dwight Spencer
@ John1024真正的工作是使用更合適的'<,'>或者在一個包含一個捏 . 在第二個\%V之後 - Dwight Spencer


你應該研究更多。 什麼Vim命令可用於引用/取消引用單詞?

引用:

surround.vim 將是你最簡單的答案。如果你真的定了   反對使用它,這裡有一些你可以做的例子。不   必須是最有效的,但這就是為什麼環繞.vim   書面。

  • 引用一個單詞,使用單引號 ciw'Ctrl+r"'
    • ciw  - 刪除光標所在的單詞,最後進入插入模式。
    • '  - 添加第一個引用。
    • Ctrl+r"  - 插入的內容 " 註冊,也就是最後一次抽牌/刪除。
    • '  - 添加收盤報價。


  • 取消引用單引號括起來的單詞 di'hPl2x
    • di'  - 刪除單引號括起來的單詞。
    • hP  - 將光標向左移動一個位置(在開頭引號的頂部),並將剛剛刪除的文本放在引號之前。
    • l  - 將光標向右移動一個位置(在開頭報價的頂部)。
    • 2x  - 刪除兩個引號。

  • 將單引號更改為雙引號 va':s/\%V'\%V/"/g
    • va'  - 直觀地選擇引用的單詞和引號。
    • :s/  - 開始更換。
    • \%V'\%V  - 僅匹配視覺選定區域內的單引號。
    • /"/g  - 用雙引號替換它們。

9
2017-07-12 19:24



tl; dr安裝 surround.vim,在視覺上選擇文本,然後按 S"。 - Cristian Ciupitu
@CristianCiupitu ysi)" 沒有視覺模式。 - FDinoff


命令序列 cw""<ESC>P 是一個接近的東西,可以做一個文本的周圍,並通過切割單詞(字母數字字符串:a-z,A-Z,0-9,包括_ [下劃線])工作,然後插入文本 "",並擊中逃生鑰匙(<ESC> 為了逃避插入模式,可以在光標之前粘貼。因此命令分解為:

c  - 切入登記冊

w  - 正則表達式匹配\ w

""   - 插入兩個 " 當前光標位置的字符

<ESC>  - 用於敲擊逃生鑰匙的VIM簡寫。在此上下文中,返回命令模式

P  - 粘貼當前寄存器

但是,如果當前行上需要包含更長的字符串集,則需要使用帶有捕獲組的替換正則表達式命令,例如:

:s/\(\w\+\)/"\1"/g

此命令將捕獲的結果匹配的正則表達式存儲為組“1”,並執行預先形式替換以在報價中插入組的內容。因此,鑑於案文:

fubar: 1

變為:

"fubar": 1

vim介紹 幫助文件是任何人的最佳資源之一,以及 :help 命令。


4
2017-10-14 20:06



這也適用於視覺模式 - predikt
我認為一個小的改進是使用ciw“”<ESC> P,因為你可以將光標放在單詞的中間,你可以做“改變內部單詞”。 - Andrei Sura


不要使用視覺模式。只需將parens中的文本更改為“”,然後將刪除的文本粘貼到其間。 CI)“”<Esc>鍵P

如果你想使用視覺模式,它的工作方式是相同的,你只需刪除'i)'部分: C””<Esc>鍵P

<Esc>鍵 意味著點擊轉義鍵)


1
2017-07-13 01:51





以下是我引用一些視覺選擇的方法:

  1. 在VISUAL模式下,選擇您需要引用的文本,然後按 qqc""<Esc>Pq

    • qq 開始將您的行為記錄到記錄中q
    • c 將所選文本放入寄存器並切換到INPUT模式
    • "" 放置您需要用以包含文本的符號
    • <Esc> 切換到NORMAL模式
    • P 將寄存器中的文本放在光標位置,引號之間
    • q 表示記錄動作的結束
  2. 現在,在同一個會話中,您只需鍵入即可引用任何可視塊 @q,播放我們以前記錄的行動

  3. ???

  4. 使用後 @q 一旦你能夠發行 @@ (重複上一個操作)引用後續的視覺選擇


1
2018-01-12 11:44



第3步是什麼?請修復你的答案。 - DavidPostill♦