題 移動到空行中的特定列


我正在嘗試將VIM用於Word處理的情況,例如,我可能需要將日期放在沒有其他文本的行的第70列。因此,例如,如果第1行當前沒有文本,並且我想在第70列插入內容,那麼我知道如何進入第70列的唯一方法是在插入模式下按空格鍵,這是一個非常緩慢的過程。

有沒有辦法做我想在VIM中實現的目標?即跳到空白行中的特定列。即使我可以做類似的事情 70l (向右移動70個空格)會很驚人,但它不能在沒有任何文本的行上工作。


4
2017-08-29 22:34


起源




答案:


您還可以考慮virtualedit,它允許您將光標放在任何位置,無論是否有角色。

使用(簡短形式 set ve=all

:set virtualedit=all

啟用它。然後用 70| 去70列。拿一個 :help 'virtual edit'

關閉它使用 :set virtualedit= (簡寫 set ve=


10
2017-08-29 23:47



謝謝,這很好但是如何取消,不會在文檔中說, set novirtualedit 不這樣做,也不做 set novirtualedit=all - BrainLikeADullPencil
這是一個很好的答案,我不知道 virtualedit 選項! @BrainLikeADullPencil:默認為 set virtualedit=,沒有爭論。 (編輯 - 哦,他在答案中也提到了,我認為它已被編輯以包含此信息) - Valmiky Arquissandas


你可以做 70i 其次是 esc (那是 70一世空格鍵退出)。

對於您提到的具體情況 - 在第70列添加日期:

  • 69一世空格鍵退出$

    這將創建69個空格,光標將位於第69列;

  • :r !date  輸入

    這將復制輸出 date 命令進入編輯緩衝區(在下一行);

  • 退格Ĵ

完成此步驟後,您將獲得日期,從第70列開始。

可能有一種更簡單的方法,但至少這一種方法是肯定的。


3
2017-08-29 22:53



非常好,謝謝。在接受之前,我會看到其他人想出來的 - BrainLikeADullPencil
什麼是 backspace J實際上告訴VIM要做什麼?我看到它在這種情況下有效,但想知道它給出的指令 - BrainLikeADullPencil
如果你接受它,太好了!但即使這不是公認的答案,如果你發現它值得,你總是可以投票;) - Valmiky Arquissandas
backspace只是我移動到前一行的方式。你也可以使用 k 字符做同樣的事情(但是退格將它移動到前一行的末尾,這是我想要做的直覺,即使實際上沒有必要)。 J 將當前行與下一行連接起來,有效地使它們成為一條更大的線。自從 :r 命令在下一行插入輸出,我必須加入它們。 - Valmiky Arquissandas
你的解決方案最適合vi,但vu(imo)的virtualedit響應更好 - BrainLikeADullPencil


不是最漂亮的方式,但你可以修改 shiftwidth,這是單個選項卡的大小。在命令模式下輸入 :set shiftwidth=1 然後在第70列輸入您想要的內容,然後使用以下命令: V (大寫'v')突出顯示當前行然後鍵入 70>。這應該將您的文本標記為70列。

然後在那之後,設置你的 shiftwidth 回到4,使標籤更加一致。除非這是一項經常執行的任務,否則您無法使用Tab鍵。


1
2017-08-29 22:44



嗯,我有一個可以切換的WordPressing功能(參見 drbunsen.org/writing-in-vim)我想我可以將移位寬度放在那裡然後當我離開WP模式時它會恢復 - BrainLikeADullPencil
這是一個好主意,但只有你有 :set expandtab 激活,以便您實際寫入70個空格,而不是單個製表符。 - Valmiky Arquissandas


另一種方法是設置 tabstop 到70並設定 expandtab 將標籤擴展到空格:

:se ts=70
:se et

然後你可以點擊tab鍵進入第70列。


0
2017-08-30 23:39