2012-07-18 59 views
2

我發現它能夠在Vim中使用宏是多麼方便。特別是用q進行錄音,但我很困惑如何讀取正在錄製的寄存器中存儲的內容。Vim如何在寄存器中顯示宏?

舉一個具體的例子,我使用Vim寫了很多LaTeX文檔,並且在這方面我製作了一個宏,它在當前行的開頭放置了一個%,這樣代碼就被註釋掉了。我通過錄制如下進行。我按下了鑰匙qu首頁i%Escq。現在通過按@u我可以播放該宏,因爲我使用了這個宏,我決定把它放在我的.vimrc文件中。我看了一下這個主題,發現我必須使用Ctrl + V來抓取我使用的擊鍵,例如轉義鍵。我

let @u='^[OHi%^[' 

其中I產生與^OH Ctrl鍵+V主頁^[Ctrl鍵 + VEsc鍵。現在,當我啓動Vim寄存器的內容u^[OHi%^[,因爲它應該是,但如果我剛剛錄製的宏與q,則寄存器會讀

<80>khi%^[ 

我試圖理解這是什麼意思。它做同樣的事情,但如果我嘗試在Vim的(更準確地說:help key-notation:help i_CTRL-V:help i_CTRL-V_digit)諮詢一些幫助頁面後使用按Ctrl +V寫類似的東西,但我還是不明白。

我希望瞭解這一點的動機是我希望能夠閱讀我錄製的宏是什麼。如果我瞭解寄存器的內容是如何產生的,那麼我可以通過產生類似的結果來理解它。例如,如果我錄製宏遵循相同的語法使用按Ctrl +V當作爲然後我可以檢查哪些按Ctrl +V加上最有可能產生的按鍵,看看哪一個相匹配。

+0

不是你的問題的答案,但你應該嘗試使用'0'而不是''。這會爲你節省一個'ctrl-v'。 – skeept 2012-07-18 19:11:21

+1

雖然很榮幸自己嘗試一下:我認爲書呆子評論者也支持LaTeX:http://www.vim.org/scripts/script.php?script_id=1218 – eckes 2012-07-18 20:16:24

回答

1

我不認爲宏是這個職位的合適的工具,我覺得你真的應該遵循$ vimtutor現在:<Home>i%<Esc>不在行的開頭插入%的正確途徑。

nnoremap <leader>% I%<Esc> 

似乎是一個更好,更正確的解決方案。

<80>xx是Vim內部用來表示特殊鍵的控制字符。有關可能值的列表,請參閱$ man termcap

+0

我並不是那麼有經驗的Vim用戶,所以我不知道宏是否不是最好的方法,但是我使用宏的原因是它允許我輸入':'<,'> normal @ u',然後把'%'放在視覺上每一行的開始。除此之外,我實際上是從'I%'解決方案開始的,但是如果你的行開頭是多個'',那麼'%'就位於''之後,我想避免這種情況。是否有可能自己產生這個控制角色? – Kristian 2012-07-18 20:32:20

+0

':'<,'>標準I%'也可以,或者':'<,'>標準0i%'如果你在列1處看到'%'。整個宏觀業務在這裏是無用的。我不知道你怎麼能輸入'<80> kc'表示法。也許你可以將這個'<80>'保存在一個寄存器中,並將它粘貼到你想要模擬的密鑰的正確的termcap符號之前。我有這樣的感覺,即通過所有這些都不是很有用。 – romainl 2012-07-18 20:50:24

+0

我想你是對的。我想我會試圖找出如何生產這些。我不需要它。如果我想解碼我錄製的宏,我可以參考'$ man termcap'。並感謝關於使用'norm'的暗示。當我意識到這樣的事情的時候,我意識到我非常喜歡使用Vim。這絕對是由知道文本編輯程序應該如何工作的人制作的。 – Kristian 2012-07-19 16:44:46