所以我發現Vim的一個常見任務是將PUT放到行的開頭或行的末尾。所以我的映射可能是:Vim - 使用可選的寄存器前綴映射
nmap <Leader>p $p
nmap <Leader>P 0P
但是,我真正想要做的是在放置前可選擇包含一個寄存器。
因此,例如「A,P會把從註冊到該行的開頭。
有沒有辦法做到這一點與映射?
所以我發現Vim的一個常見任務是將PUT放到行的開頭或行的末尾。所以我的映射可能是:Vim - 使用可選的寄存器前綴映射
nmap <Leader>p $p
nmap <Leader>P 0P
但是,我真正想要做的是在放置前可選擇包含一個寄存器。
因此,例如「A,P會把從註冊到該行的開頭。
有沒有辦法做到這一點與映射?
您可以在一行中做到這一點使用<expr>
映射:
nnoremap <expr> \p '$"'.v:register.v:count1.'p'
nnoremap <expr> \P '0"'.v:register.v:count1.'P'
這是完全可能的。我第一次不過,我覺得這個解決方案是可能的:https://stackoverflow.com/a/290723/15934,但<expr>
不會讓我們將光標移動如我們所願,而不能用於normal
不過,我們可以這樣做:
function! s:PutAt(where)
" <setline($+1> appends, but <setline(0> does not insert, hence the hack
" with getline to build a list of what should be at the start of the buffer.
let line = a:where ==1
\ ? [getreg(), getline(1)]
\ : getreg()
call setline(a:where, line)
endfunction
nnoremap <silent> <leader>P :call <sid>PutAt(1)<cr>
nnoremap <silent> <leader>p :call <sid>PutAt(line('$')+1)<cr>
他談論在該行,而不是文件的開始/結束加入。順便說一句,''映射確實允許你移動一個遊標,你只需要將遊標移動命令添加到表達式的結果中。 –
ZyX
2012-03-31 16:33:27