मैं कैसे जल्दी से उद्धरण / शब्दों '
को हटा सकता हूं और "
विम में उद्धरण (जैसे से ) तक बदल सकता हूं ? मैं चारों ओर के बारे में जानता हूँ ।im प्लगइन, लेकिन मैं सिर्फ विम का उपयोग करना चाहूंगा।
मैं कैसे जल्दी से उद्धरण / शब्दों '
को हटा सकता हूं और "
विम में उद्धरण (जैसे से ) तक बदल सकता हूं ? मैं चारों ओर के बारे में जानता हूँ ।im प्लगइन, लेकिन मैं सिर्फ विम का उपयोग करना चाहूंगा।
जवाबों:
चारों ओर.विम आपका सबसे आसान जवाब होने जा रहा है। यदि आप वास्तव में इसका उपयोग करने के खिलाफ सेट हैं, तो यहां कुछ उदाहरण दिए गए हैं कि आप क्या कर सकते हैं। जरूरी नहीं कि सबसे कुशल हो, लेकिन इसीलिए चारों ओर से.विम लिखा गया।
ciw'Ctrl+r"'
ciw
- कर्सर जिस शब्द पर है, उसे हटाएं और इन्सर्ट मोड में समाप्त करें।'
- पहला उद्धरण जोड़ें।Ctrl+r"
- "
रजिस्टर की सामग्री डालें , अंतिम यान उर्फ / हटाएं।'
- समापन उद्धरण जोड़ें।
di'hPl2x
di'
- सिंगल कोट्स द्वारा बताए गए शब्द को डिलीट करें।hP
- कर्सर को एक स्थान पर छोड़ दें (शुरुआती उद्धरण के शीर्ष पर) और बोली से पहले बस हटाए गए पाठ को डालें।l
- कर्सर को दाईं ओर एक स्थान पर ले जाएं (शुरुआती भाव के ऊपर)।2x
- दो कोट्स को डिलीट करें।
va':s/\%V'\%V/"/g
va'
- देखे हुए शब्द और उद्धरणों का चयन करें।:s/
- एक प्रतिस्थापन शुरू करें।\%V'\%V
- केवल सिंगल कोट्स का मिलान करें जो नेत्रहीन चयनित क्षेत्र के भीतर हैं।/"/g
- उन सभी को डबल कोट्स से बदलें।ciw
सिर्फ और सिर्फ क्यों cw
? मुझे पहली उलझन और दूसरी ठीक लगी।
ciw
परवाह किए बिना काम करता है कि आपका कर्सर शब्द में कहां है। cw
केवल तभी काम करता है जब आपका कर्सर शब्द के प्रारंभ में हो। देख लो :help iw
।
.
कमांड के साथ काम नहीं करता है । इसे काम करने के लिए, उपयोग करें ciw' Ctrl+r Ctrl+p"
। फिर .
जैसा आप इसे निम्न शब्द के लिए चाहते हैं वैसा ही व्यवहार करेंगे: रजिस्टर की सामग्री को याद रखने के बजाय, यह आपको याद रखेगा कि आप अभी रजिस्टर में हैं जो चाहते हैं (समझाने के लिए कठिन है, लेकिन यदि आप दोनों की कोशिश करते हैं, तो यह स्पष्ट हो जाएगा :-))
एकल उद्धरण का उपयोग करते हुए एक शब्द उद्धरण
ciw'Ctrl+r"'
मेरे लिए इस तरह से करना आसान था
ciw '' Esc P
यहां कुछ मानचित्रण हैं जो मदद कर सकते हैं:
:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P
यदि आपने मैपलीडर वैरिएबल नहीं बदला है, तो मैपिंग को सक्रिय करें \q"
\q'
या साथ करें \qd
। वे कर्सर के नीचे शब्द के चारों ओर दोहरे उद्धरण जोड़ते हैं, कर्सर के नीचे शब्द के चारों ओर एकल उद्धरण, कर्सर के नीचे शब्द के आसपास किसी भी उद्धरण को क्रमशः हटाते हैं।
map <Leader>' gewi'<Esc>A'<Esc>
लिए अपनी .vimrc
फ़ाइल में जोड़ना समाप्त कर दिया ; जिसने मुझे कुछ MSDOS स्क्रिप्ट्स को बैश करने में मदद की।
:vnoremap <leader>q c""<esc>P
।
अन्य आदेशों के अलावा, यह सभी शब्दों को दोहरे उद्धरणों में एक पंक्ति में संलग्न करेगा (आपकी टिप्पणी के अनुसार)
:s/\(\S\+\)/"\1"/
या यदि आप बैकस्लैश की संख्या कम करना चाहते हैं, तो आप \v
पैटर्न की शुरुआत में एक (बहुत-जादू) संशोधक डाल सकते हैं
:s/\v(\S+)/"\1"/
:s/\v([a-Z]+)/"\1"/g
स्थूल तरीके!
प्रेस qऔर qक्यू रजिस्टर में रिकॉर्डिंग के लिए (हम "उद्धरण" याद रखने के लिए शॉर्टकट के रूप में "q" का उपयोग करते हैं)।
प्रेस shift+ bवर्तमान शब्द के सामने से कदम कर्सर
प्रेस iप्रकार '(एक उद्धरण)
प्रेस escतब eशब्द के अंत में जाने के लिए दबाएं
प्रेस करें aफिर 'उद्धरण के साथ शब्द को घेरने के लिए फिर से दबाएं ।
escसामान्य मोड में आने के लिए दबाएँ ।
अंत qमें इसे q
रजिस्टर में दर्ज करने के लिए दबाएं ।
कैसे इस्तेमाल करे
आप किसी step 4
भी चीज़ के साथ बदल सकते हैं जैसे {एक पंक्ति, एक शब्द जब तक कुछ वर्ण नहीं मिला, आदि}।
दर्ज मैक्रो को लगातार करें
चलो @ क्यू = ' ctrl+ r ctrl+ rक्यू'
सेव करके छोड़ो
अपनी फ़ाइलें खोलें, कुछ शब्दों पर जाएं
@q
यदि आप इसे सही तरीके से करते हैं, तो जादू की बातें आपके शब्दों में प्रकट होनी चाहिए।
आप अन्य मैक्रो के लिए इस चरण को कर सकते हैं जिसे आप प्यार करते थे।
@q w
और फिर आप अगले n
शब्दों को उद्धरण चिह्नों के साथ लपेट सकते हैं n@j
।
एकल उद्धरण (उदाहरण के लिए) में लपेटने के लिए ciw'<C-r>"'<esc>
काम करता है, लेकिन दोहराना काम नहीं करेगा। प्रयत्न:
ciw'<C-r><C-o>"'<esc>
यह डिफ़ॉल्ट रजिस्टर "शाब्दिक" की सामग्री डालता है। अब आप इसे .
किसी भी शब्द पर उद्धरण में लपेटने के लिए दबा सकते हैं । :h[elp] i_ctrl-r
टेक्स्ट ऑब्जेक्ट्स के बारे में और अधिक देखने और जानने के लिए:h text-objects
स्रोत: http://vimcasts.org/episodes/pasting-from-insert-mode/
ciw'<C-R><C-O>"'<Esc>
।
.
हुए अंतिम वास्तविक कॉल की सामग्री को फिर से लिखना होगा।
VSCodeVim के उपयोगकर्ताओं के लिए आप कर सकते हैं
vwS"
"
जिस चीज से लपेटना चाहते हैं उसे बदल सकते हैं ।w
किसी अन्य चयन ऑपरेटर से बदल सकते हैंviwS'
जिसने इस शब्द को सिंगल कोट्स में लपेट दिया। अब तक सबसे आसान।
viwS"
मैं इसके लिए कोई बिल्ट विम कमांड नहीं जानता, लेकिन r"f'r"
' r'f"r'
पहले से खड़े होने पर' को 'से' में बदलने और "से 'काम करने के लिए' में बदल जाता है।" कमांड r'
आपके कर्सर के नीचे जो भी चरित्र होता है उसे बदल देता है । " और f"
आपको अगले की ओर अग्रसर करता है ”।
'r
और "r
) के बजाय , आप बस टाइप कर सकते हैं .
और यदि आप अधिक उद्धरण बदलना चाहते हैं, ;
और ,
आपको अगले या पिछले एक पर ले जाते हैं क्योंकि वे f/F/t/T
क्रमशः अंतिम खोज को उसी दिशा में या विपरीत एक को दोहराते हैं।
उद्धरण जोड़ना
मैंने अपने इस त्वरित और गंदे कार्य का उपयोग करना शुरू कर दिया .vimrc
:
vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>
function! QuickWrap(wrapper)
let l:w = a:wrapper
let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
normal `>
execute "normal " . inside_or_around . escape(w, '\')
normal `<
execute "normal i" . escape(w, '\')
normal `<
endfunction
तो अब, मैं नेत्रहीन रूप से जो कुछ भी चाहता हूं (आमतौर पर के माध्यम से viw
- नेत्रहीन शब्द के अंदर चयन करें ) को उद्धरण और प्रेस में चुनता हूंQ दोहरे उद्धरण चिह्नों के लिए , या qएकल उद्धरणों के लिए दबाता ।
उद्धरण निकालना
vnoremap s <esc>:call StripWrap()<cr>
function! StripWrap()
normal `>x`<x
endfunction
मैं vim-textobj-quotes का उपयोग करता हूं, ताकि विम एक टेक्स्ट ऑब्जेक्ट के रूप में उद्धरण व्यवहार करता है। इसका मतलब है कि मैं कर सकता हूं vaq
(नेत्रहीन रूप से उद्धरण के आसपास का चयन करें । यह निकटतम उद्धरण पाता है और नेत्रहीन उन्हें चुनता है। (यह वैकल्पिक है, आप बस कुछ ऐसा कर सकते हैं f"vww
)। फिर मैं चयन से उद्धरणों s
को पट्टी करने के लिए दबाता हूं ।
बदलते हुए भाव
चुम्मा। मैं उद्धरण हटाता हूं फिर उद्धरण जोड़ता हूं । उदाहरण के लिए, सिंगल कोट्स को डबल कोट्स से बदलने के लिए, मैं चरणों का पालन करूंगा: 1. सिंगल कोट्स को हटा दें:, vaqs
2. नए कोट्स को जोड़ें vwQ
:।
यदि आप विम प्लगइन का उपयोग करते हैं https://github.com/tpope/vim-surround (या VSCode Vim प्लगइन का उपयोग करें, जो विम-सराउंड प्री-इंस्टॉल के साथ आता है), तो यह बहुत ही सुंदर है!
जोड़ना
ysiw' // surround in word `'`
ड्रॉप
ds' // drop surround `'`
परिवर्तन
cs'" // change surround from `'` to `"`
यह html टैग्स के लिए भी काम करता है!
cst<em> // change surround from current tag to `<em>`
बेहतर उदाहरणों के लिए गिटहब पर रीडमी देखें
यहाँ कुछ सरल मैपिंग का उपयोग किया जा सकता है जो किसी शब्द को उद्धृत करने और अनक्लोक्ट करने के लिए उपयोग किए जा सकते हैं:
" 'quote' a word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a word
nnoremap wq :silent! normal mpeld bhd `ph<CR>
qw
qd
wq
VIM vs vs के लिए यह पर्याप्त नहीं है। यदि आप vscode का उपयोग नहीं करते हैं तो यह एक विम-सराउंड आधारित है ।
कुछ उदाहरण:
"टेस्ट" कोट के अंदर कर्सर के साथ सीएस टाइप करें '' को 'टेस्ट' के साथ समाप्त करें
परीक्षण के साथ समाप्त करने के लिए उद्धरण चिह्नों के अंदर कर्सर के साथ "परीक्षण"
"टेस्ट" उद्धरण चिह्नों के साथ सीएस टाइप करें "t> और 123> एंट्री के साथ <123> टेस्ट समाप्त करें
(परीक्षण) के साथ समाप्त करने के लिए शब्द परीक्षण प्रकार ysaw पर कर्सर के साथ परीक्षण (परीक्षण)
मैं अपने .vimrc में nnoremap का उपयोग कर रहा हूं
एक शब्द बोली के लिए:
nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl
उद्धरण हटाने के लिए (दोहरे उद्धरण चिह्नों पर भी काम करता है):
nnoremap qs :silent! normal mpeld bhd `ph<CR>
याद रखने का नियम: 'वर्ग' = एकल उद्धरण।
इस बारे में कैसा है?
:%s/\'/"/g
%
, यह केवल वर्तमान पंक्ति पर काम करेगा जब तक कि आपने पूरी फाइल को नहीं चुना है
मैंने एक स्क्रिप्ट लिखी है जो ऐसा करती है:
function! WrapSelect (front)
"puts characters around the selected text.
let l:front = a:front
if (a:front == '[')
let l:back = ']'
elseif (a:front == '(')
let l:back = ')'
elseif (a:front == '{')
let l:back = '}'
elseif (a:front == '<')
let l:back = '>'
elseif (a:front =~ " ")
let l:split = split(a:front)
let l:back = l:split[1]
let l:front = l:split[0]
else
let l:back = a:front
endif
"execute: concat all these strings. '.' means "concat without spaces"
"norm means "run in normal mode and also be able to use \<C-x> characters"
"gv means "get the previous visual selection back up"
"c means "cut visual selection and go to insert mode"
"\<C-R> means "insert the contents of a register. in this case, the
"default register"
execute 'norm! gvc' . l:front. "\<C-R>\"" . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>
उपयोग करने के लिए, बस कुछ हाइलाइट करें, नियंत्रण एल को हिट करें और फिर एक चरित्र लिखें। यदि यह उन पात्रों में से एक है, जिनके बारे में फ़ंक्शन जानता है, तो यह सही समाप्ति वर्ण प्रदान करेगा। यदि यह नहीं है, तो यह दोनों ओर सम्मिलित करने के लिए एक ही वर्ण का उपयोग करेगा।
चारों ओर से। इस से अधिक कर सकते हैं, लेकिन यह मेरी जरूरतों के लिए पर्याप्त था।