क्या किसी को एक डिफ़ॉल्ट रूप से चयनित क्षेत्र में डिफ़ॉल्ट रजिस्टर में रखे बिना चयन करने का तरीका पता है?
मुझे पता है कि मैं एक स्पष्ट रजिस्टर से हमेशा चिपकाकर समस्या को हल कर सकता हूं। लेकिन यह "xpसिर्फ के बजाय टाइप करने के लिए गर्दन में दर्द हैp
क्या किसी को एक डिफ़ॉल्ट रूप से चयनित क्षेत्र में डिफ़ॉल्ट रजिस्टर में रखे बिना चयन करने का तरीका पता है?
मुझे पता है कि मैं एक स्पष्ट रजिस्टर से हमेशा चिपकाकर समस्या को हल कर सकता हूं। लेकिन यह "xpसिर्फ के बजाय टाइप करने के लिए गर्दन में दर्द हैp
जवाबों:
"{register}p
आप वर्णन के रूप में काम नहीं करेगा। यह रजिस्टर की सामग्री के साथ चयन की जगह लेगा। आपको इसके बजाय कुछ करना होगा:
" I haven't found how to hide this function (yet)
function! RestoreRegister()
let @" = s:restore_reg
return ''
endfunction
function! s:Repl()
let s:restore_reg = @"
return "p@=RestoreRegister()\<cr>"
endfunction
" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()
जो तब तक ठीक होना चाहिए जब तक आप एक ऐसे प्लगइन का उपयोग नहीं करते हैं जिसमें पी के लिए एक गैर-नॉर वैम्प है, और जो एक रजिस्टर को ओवरराइट करने की अपेक्षा करता है।
यह कोड वहां एक स्क्रिप्ट के रूप में उपलब्ध है । इंगो कारकट ने भी इसी मुद्दे को हल करने वाले एक प्लगइन को परिभाषित किया ।
regtype
(linewise?) याद नहीं होगा और यह कि रीमैपिंग पी pgvy
पर्याप्त है।
"xp
, यह विपरीत @"
सामग्री को अधिलेखित नहीं करता है@x
pgvy
:xnoremap p pgv@=v:register.'y'<cr>
?
मैं के साथ नष्ट कर दिया सभी पाठ को कॉपी करने की डिफ़ॉल्ट vim व्यवहार पसंद नहीं d
, D
, c
, या C
में डिफ़ॉल्ट रजिस्टर।
मैंने इसके चारों ओर मैपिंग d
करके "_d
, c
इसे "_c
, और इसी तरह प्राप्त किया है।
मेरे .vimrc से:
"These are to cancel the default behavior of d, D, c, C
" to put the text they delete in the default register.
" Note that this means e.g. "ad won't copy the text into
" register a anymore. You have to explicitly yank it.
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
nnoremap c "_c
vnoremap c "_c
nnoremap C "_C
vnoremap C "_C
निम्न का उपयोग करें:
xnoremap p pgvy
यह दृश्य मोड में चिपकाए गए किसी भी पाठ को पुनः आकार देगा और पुन: जमा करेगा।
संपादित करें: इस क्रम में "xp
आप कर सकते हैं के साथ काम करने के लिए:
xnoremap p pgv"@=v:register.'y'<cr>
v:register
एक सामान्य मोड कमांड में प्रयुक्त अंतिम रजिस्टर नाम तक फैलता है।
"xp
, यह दृष्टिकोण ओवरराइट @"
करता है @x
।
xnoremap p pgv"@=v:register.'y'<cr>
मेरे काम नहीं आया। लेकिन यह करता है:xnoremap <expr> p 'pgv"'.v:register.'y'
g
? मैंने इसे पहले नहीं देखा है।
g
अकेले कुछ नहीं करता है। यह विस्तारित, बहु-कुंजी आदेश प्रदान करता है, जैसे z
। उदाहरण के लिए, go
बफर में nth बाइट में जाता है, gj
और gk
अगली और पिछली प्रदर्शित लाइन पर जाता है ( jk
लाइनों से अलग होने पर अलग होता है ), ga
कर्सर के नीचे चरित्र पर जानकारी प्रदर्शित करता है, gJ
बिना स्पेस के लाइनों में जुड़ता है, और यहां gv
अंतिम दृश्य चयन को पुनर्स्थापित करता है। आप उपयोग कर सकते हैं :help gv
।
:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, मैंने कर्सर की स्थिति को बहाल करने के लिए `` `` `को जोड़ा
अपने में .vimrc
xnoremap p "_dP
मुझे यह एक समान धागे पर प्रतिक्रिया से मिला, लेकिन मूल स्रोत http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text था । इसमें कुछ कमियों का उल्लेख है, हालांकि यह मेरे लिए ठीक है।
.vimrc.local
ठीक भी है।
Luc Hermitte का समाधान एक आकर्षण की तरह काम करता है। मैं लगभग एक हफ्ते से इसका इस्तेमाल कर रहा था। तब मैंने स्टीव लोश के .vimrc से एक समाधान खोजा जो अच्छी तरह से काम करता है यदि YankRing आपके प्लगइन / बंडल लाइनअप का हिस्सा है:
function! YRRunAfterMaps()
" From Steve Losh, Preserve the yank post selection/put.
vnoremap p :<c-u>YRPaste 'p', 'v'<cr>gv:YRYankRange 'v'<cr>
endfunction
अपने में यह प्रयास करें ~/.vimrc
:
xnoremap <expr> p 'pgv"'.v:register.'y'
xnoremap
इसका मतलब है कि यह केवल Visual
मोड के लिए है, मोड के लिए नहीं Visual + Select
।
<expr>
कि साधन {rhs}
की xnoremap {lhs} {rhs}
सेटिंग अभिव्यक्ति के रूप में मूल्यांकन किया जाता है।
इस मामले में, हमारी अभिव्यक्ति के 'pgv"'.v:register.'y'
लिए अभिव्यक्ति का उपयोग .
किया जाता है।
v:register
मानचित्रण की पूर्ति के दौरान उपयोग किए जा रहे रजिस्टर का मूल्यांकन किया जाता है।
के परिणाम का "xp
मूल्यांकन होगा pgv"xy
, जहां x
रजिस्टर है।
मैं इस stackoverflow प्रश्न का उत्तर से मदद मिली: विम - एक वैकल्पिक रजिस्टर उपसर्ग के साथ मानचित्रण के साथ संयोजन के रूप में बेनोइट के जवाब इस पृष्ठ पर
इस तथ्य का समर्थन करने के लिए कि मैंने क्लिपबोर्ड = अनाम सेट का समर्थन किया है, के बाद ल्यूक के कार्य ने मेरे लिए अच्छा काम किया:
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
clipboard=unnamedplus
करने के @+
बजाय होना चाहिए @*
।
ल्यूक हरमिट ने किया यह कारनामा! वास्तव में अच्छा। यहां उसका समाधान टॉगल फ़ंक्शन में रखा गया है, जिससे आप सामान्य व्यवहार और नो-रिप्ले-रजिस्टर के बीच स्विच कर सकते हैं।
कमांड, यू व्यवहार को टॉगल करता है
let s:putSwap = 1
function TogglePutSwap()
if s:putSwap
vnoremap <silent> <expr> p <sid>Repl()
let s:putSwap = 0
echo 'noreplace put'
else
vnoremap <silent> <expr> p p
let s:putSwap = 1
echo 'replace put'
endif
return
endfunction
noremap ,p :call TogglePutSwap()<cr>
silent! vunmap
बजाय पसंद करते हैंvnoremap <silent> <expr> p p
डक्ट-टेप प्रोग्रामिंग, लेकिन मेरे लिए काम करता है:
nmap viwp viwpyiw
nmap vi'p vi'pyi'
nmap vi"p vi"pyi"
nmap vi(p vi(pyi(
nmap vi[p vi[pyi[
nmap vi<p vi<pyi<
प्रयत्न -
:set guioptions-=a
:set guioptions-=A