ما هي أوامر (أوامر) VIM يمكن استخدامها لاقتباس الكلمات/عدم احترامها؟

StackOverflow https://stackoverflow.com/questions/2147875

  •  23-09-2019
  •  | 
  •  

سؤال

كيف يمكنني الاقتباس بسرعة/عدم احترام الكلمات والتغيير اقتباس (على سبيل المثال من ' ل ") في VIM؟ أنا أعرف عن المحيط البرنامج المساعد ، لكني أود استخدام فقط Vim.

هل كانت مفيدة؟

المحلول

اطلاع. إذا كنت قد تم تعيينك حقًا ضد استخدامه ، فإليك بعض الأمثلة لما يمكنك القيام به. ليس بالضرورة الأكثر كفاءة ، ولكن هذا هو السبب في محيط.

  • اقتبس كلمة ، باستخدام عروض أسعار واحدة
    ciw'Ctrl+r"'
    • ciw - احذف كلمة المؤشر ، وينتهي في وضع إدراج.
    • ' - إضافة الاقتباس الأول.
    • Ctrl+r" - أدخل محتويات " سجل ، ويعرف أيضا باسم آخر yank/delete.
    • ' - إضافة اقتباس الإغلاق.

  • قم بفصل كلمة مغلقة في اقتباسات واحدة
    di'hPl2x
    • di' - حذف الكلمة المحاطة باقتباسات واحدة.
    • hP - حرك المؤشر ترك مكانًا واحدًا (أعلى اقتباس الافتتاح) ووضع النص المحذوف فقط قبل الاقتباس.
    • l - حرك المؤشر اليمين مكان واحد (أعلى اقتباس الافتتاح).
    • 2x - حذف اثنين من الاقتباسات.

  • تغيير اقتباسات واحدة إلى عروض الأسعار المزدوجة
    va':s/\%V'\%V/"/g
    • va' - حدد بصريًا الكلمة المقتبسة والاقتباسات.
    • :s/ - بدء بديل.
    • \%V'\%V - تطابق فقط اقتباسات واحدة تقع داخل المنطقة التي تم اختيارها بصريًا.
    • /"/g - استبدلهم جميعًا باقتباسات مزدوجة.

نصائح أخرى

اقتبس كلمة ، باستخدام عروض أسعار واحدة

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

إذا لم تقم بتغيير متغير mapleader ، فعليك تنشيط التعيين مع \q" \q' أو \qd. يضيفون اقتباس مزدوج حول الكلمة تحت المؤشر ، اقتباس واحد حول الكلمة تحت المؤشر ، حذف أي اقتباسات حول الكلمة تحت المؤشر على التوالي.

بالإضافة إلى الأوامر الأخرى ، سيحيل هذا كل الكلمات في خط في عروض أسعار مزدوجة (وفقًا لتعليقك)

:s/\(\S\+\)/"\1"/

أو إذا كنت ترغب في تقليل عدد عمليات الرضاك الخلفية ، فيمكنك وضع ملف \v (مسيء للغاية) المعدل في بداية النمط

:s/\v(\S+)/"\1"/

للالتفاف في اقتباسات واحدة (على سبيل المثال) 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/

طريقة وحدات الماكرو

  1. صحافة س و س للتسجيل في سجل Q (نستخدم "Q" كاختصار لتذكر "اقتباسات").

  2. صحافة تحول + ب نقل المؤشر إلى أمام الكلمة الحالية

  3. صحافة أنا يكتب ' (اقتباسات واحدة)

  4. صحافة خروج ثم اضغط ه للانتقال إلى نهاية الكلمة

  5. صحافة أ ثم اضغط ' مرة أخرى لتطويق الكلمة مع اقتباسات.

  6. اضغط أخيرا س لتسجيله في q تسجيل.

كيفية استخدامها :

  1. نقل المؤشر إلى كلمة مرغوبة.
  2. يضعط @س لتطويق كلمة مع اقتباسات.
  3. يضعط @@ إذا كنت تريد تكرارها إلى كلمة أخرى.

يمكنك تغيير step 4 مع أي شيء تحب {خط ، كلمة حتى وجدت بعض الأحرف ، إلخ}. ضعه في vim variables و .vimrc لتكرار سعادتك.

لا أعرف أي أمر مبني على هذا ، ولكن باستخدام r"f'r" للتغيير من "إلى" و r'f"r' للتغيير من "إلى" يعمل إذا كنت تقف على الأول "أو". الامر r' يحل محل أي شخصية تحت المؤشر مع "، و f" ينقلك إلى الأمام إلى التالي ".

لمستخدمي VScodevim يمكنك القيام به

vwS"

  • يمكنك استبدال " مع كل ما ترغب في الالتفاف.
  • يمكنك استبدال w مع أي مشغل اختيار آخر

إضافة اقتباسات

بدأت في استخدام هذه الوظيفة السريعة والقذرة في بلدي .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 - حدد بصريا داخل الكلمة) في اقتباسات واضغط س للحصول على عروض أسعار مزدوجة ، أو اضغط س لاقتباسات واحدة.

إزالة الاقتباسات

vnoremap s <esc>:call StripWrap()<cr>

function! StripWrap()
  normal `>x`<x
endfunction

أنا أستعمل Vim-Textobj-Quotes بحيث يعامل VIM اقتباسات ككائنات نصية. هذا يعني أنه يمكنني القيام به vaq (حدد بصريا حول اقتباسات. هذا يجد أقرب اقتباسات ويختارها بصريًا. (هذا اختياري ، يمكنك فعل شيء مثل f"vww). ثم أضغط s ل قطاع اقتباسات من الاختيار.

تغيير الاقتباسات

قبلة. أنا إزالة الاقتباسات من ثم إضافة اقتباسات. على سبيل المثال ، لاستبدال عروض الأسعار المفردة مع علامات اقتباس مزدوجة ، أود إجراء الخطوات: 1. قم بإزالة عروض الأسعار المفردة: vaqs, ، 2. أضف اقتباسات جديدة: vwQ.


فيما يلي بعض التعيينات البسيطة التي يمكن استخدامها لاقتباس كلمة واحدة:

" '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>

أنا أستخدم nnoremap في .vimrc

لاقتباس واحد كلمة:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl

لإزالة الاقتباسات (تعمل على علامات اقتباس مزدوجة كذلك):

nnoremap qs :silent! normal mpeld bhd `ph<CR>

قاعدة لتذكر: 'sq' = اقتباس واحد.

VIM ل VSCODE هل هو رائع. إنه مقر vim-surround إذا كنت لا تستخدم VSCODE.

بعض الأمثلة:

"اختبار" مع المؤشر داخل اقتباسات النوع CS "" لإنهاء "اختبار"

"اختبار" مع المؤشر داخل اقتباسات النوع DS "لإنهاء الاختبار

"اختبار" مع المؤشر داخل اقتباسات النوع CS "t وأدخل 123> لينتهي به المطاف باختبار <123>

اختبار مع المؤشر على نوع اختبار الكلمة YSAW) لينتهي به الأمر بـ (اختبار)

وماذا عن هذا؟

 :%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>

لاستخدام ، فقط تسليط الضوء على شيء ، اضغط على التحكم L ، ثم اكتب حرفًا. إذا كان أحد الأحرف التي تعرفها الوظيفة ، فستوفر الحرف الصحيحة. إذا لم يكن الأمر كذلك ، فسيستخدم نفس الحرف لإدراجه على كلا الجانبين.

اطلاع.

مثال على خريطة الوضع المرئي لإضافة عروض أسعار واحدة حول كتلة محددة من النص:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top