একটি সন্নিবেশ করার সময় স্বয়ংক্রিয়ভাবে একটি বন্ধকরণ "বা 'যুক্ত করুন, তবে কেবলমাত্র যদি কার্সারটি ইতিমধ্যে স্ট্রিংয়ের মধ্যে না থাকে


14

আমি ম্যাপিংগুলি সংজ্ঞায়িত করেছি vimrcযখন আমি যখন খোলার সাথে প্রবেশ করি তখন স্বয়ংক্রিয়ভাবে বন্ধনী বন্ধনী এবং ধনুর্বন্ধনী প্রবেশ করতে পারি inoremap ( ()<esc>i

আমি একই কাজ করতে চাই "এবং ', কিন্তু শুধুমাত্র যখন কার্সার বর্তমানে একটি স্ট্রিং ভিতরে নয় - একটি স্ট্রিং ভিতরে যেমন 'সম্ভবত বদলে একটি ঊর্ধ্বকমা একটি স্ট্রিং বিভেদক হয়। কিভাবে আমি এটি করতে পারব?

উত্তর:


5

একটি পদ্ধতির syn*ফাংশন ব্যবহার করা হতে পারে । কিছুটা এইরকম:

fun! Qtx(qt)
    let x = synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")
    if x != "String" && x != "Comment" && x != "Constant"
        return a:qt . a:qt
    endif
    return a:qt
endfun


inoremap <silent> <expr> ' Qtx("'")
inoremap <silent> <expr> " Qtx('"')

আইডিয়াটি কার্সার অবস্থানে বাফারের জন্য সিনট্যাক্সটির সুবিধা গ্রহণ করা। এটি সম্ভবত আরও ভাল সমাধান করা যেতে পারে। তবে আশাকরি একটি শুরু।


ফাংশন নামের পিছনে যুক্তি কি Qtx?
মার্টিন টর্নয়েজ

@ কারপেটস্মোকার: কউওটিক্স এক্সিটাস সমাপ্ত করে।
রুনিয়াম

2

যেমনটি বলা হয়েছে, আপনাকে সিনট্যাক্স-প্রসঙ্গটি পরীক্ষা করতে হবে। পুরানো এলএইচ-বন্ধনীগুলি এই উদ্দেশ্যে Map*Context()ফাংশন সরবরাহ করে : ফাংশন । সেই থেকে বন্ধনী সংজ্ঞাগুলি আবদ্ধ হয়েছে :Bracketযা প্রসঙ্গে (স্ট্রিং বা মন্তব্য) বিবেচনায় নেবে।

ডিফল্ট প্রসঙ্গে সচেতন ম্যাপিংগুলি সমস্ত সাধারণ বন্ধনীগুলির জন্য এই জাতীয় সংজ্ঞা দেওয়া হয়:

  :Brackets! ( )
  :Brackets! [ ] -visual=0
  :Brackets! [ ] -insert=0 -trigger=<leader>[

  :Brackets! " " -visual=0 -insert=1
  :Brackets! " " -visual=1 -insert=0 -trigger=""
  :Brackets! ' ' -visual=0 -insert=1 -but=function('lh#ft#is_text')
  :Brackets! ' ' -visual=1 -insert=0 -trigger=''

  :Brackets! < > -visual=1 -insert=0 -trigger=<localleader><

  :Brackets! { }
  :Brackets! { } -visual=1 -insert=0 -nl -trigger=<leader>{
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.