簡體   English   中英

Vim 更改和跳轉列表覆蓋行為

[英]Vim change & jump lists override behaviour

我是 vim 的新手,開始玩 macroses,發現跳轉/更改列表的覆蓋行為不明顯。 主要問題 - 是否有任何穩定的方法可以通過同一行內的更改/移動來跳轉(除了標記每個點),因為此列表只記住同一行上的最后一次更改(如果更改是在線的結果)。

跳轉列表的示例。 Cursor position 在 '(', '{' - 標記為 m。

( smth ) { } %`m%

我先跳到')',然后在同一行按標記,然后在最后一個括號旁邊,我只能做一個 ^o - 第一行的最后一次跳轉。 但預計會跳 2 倍以上。

更改列表和g; 't1 t2 t3' -> 't2 t3 t4',我不能在所有 3 t 之間移動

至少我想跳過與撤消歷史記錄中存儲的點相同的點。 所有現代編輯器,如 VSCode、Sublime、etc。 有這個穩定的選項“Alt -”/“Alt +”跳轉所有上一個。 cursor 個職位。 Vim是什么方式?

在嘗試制作宏時創建它,它交換任何 2 對括號。

{ smth } (
)

讓我們用“mm”標記第一對括號,以記住我們應該與誰交換。 讓我們將“{”標記為主括號,將 go 標記為“(”,開始宏“qq”。我將當前括號對標記為“mc”,稍后在主括號和當前括號之間交換。

@q=mc%x`m%Plx^O^Op`mx`cPlx`mP

( smth ) {
}

將 cursor 移動到 { 並運行 '@q' - 我們得到初始文本,雙交換括號

問題開始了,第二對支架標記為 mm,cursor 位於第一對支架。 '(' - mm, '{' - 開始 position

{ smth } (
)

只有第一個 ^o 會起作用,然后宏會跳出這個塊

有兩個規則:“小”動作永遠不會被記住; 並且,離開插入模式時會記住“更改”。

所以所有這些宏和東西都是“批處理工具”,而不是“普通的行編輯工具”。

相反,要從t1 t2 t3獲取t2 t3 t4 ,您可以執行ctrl-a ww或將括號與d%%p交換。 等等。

這種“小修圖”應該是Vim的法線做的。所以你需要先掌握法線。 也許閱讀 Drew Neil 的“Practical Vim”會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM