ভিম আর! কার্সার অবস্থানে


16

ভিম সঙ্গে, আমি ব্যবহার করি

:r!date

ভিম অনুরূপ, পরবর্তী লাইন তারিখ সন্নিবেশ

:r!pwd

কিভাবে আমি কার্সার অবস্থানে আউটপুট কমান্ড সন্নিবেশ করতে পারি এবং কোনও নতুন লাইনের মধ্যে?


উত্তর:


16

সঙ্গে " :read "ভিম সর্বদা একটি নতুন লাইন আউটপুট সন্নিবেশ করা হবে। সমাধান দুর্ভাগ্যবশত সহজ নয়।

যখন আপনি ঢোকানোর মাধ্যমে সন্নিবেশ মোডে আছেন তখন আপনি বর্তমান কার্সার অবস্থানে একটি কমান্ডের আউটপুট সন্নিবেশ করতে পারেন নিয়ন্ত্রণ আর তারপর টাইপিং =system('command') প্রবেশ করান । দুর্ভাগ্যবশত, যদি কমান্ডের আউটপুটটি একটি পশ্চাদ্ধাবনযোগ্য নতুন লাইন (সর্বাধিক হিসাবে) থাকে তবে এটিও সন্নিবেশ করা হবে, তাই আপনার লাইনটি ভাঙ্গা হবে।

যে একটি যোগ করে সংশোধন করা যেতে পারে substitute() পিছনে নতুন লাইন ফালা কল, কিন্তু কমান্ডটি হাত দ্বারা টাইপ করা মূল্য তুলনায় আরো কষ্ট করে তোলে।

চূড়ান্ত সমাধান হল কিছু ধরণের ম্যাপিং তৈরি করা, তবে এটি কীভাবে আরও জটিল হয়ে যায়, এটি কীভাবে "পরবর্তী টাইপ" কল করে সেভাবেই ভিম পরিচালনা করে। যখন আপনি কিছু করতে পারেন:

:nmap \e i<c-r>=substitute(system('date'),'[\r\n]*$','','')<cr><esc>

ম্যাপিংয়ে কমান্ডটি "হার্ড ওয়্যার্ড" হয়, তবে আপনি এমন কিছু করতে পারবেন না:

:nmap \e i<c-r>=substitute(system(input('Command: ')),'[\r\n]*$','','')<cr><esc>

যেখানে আপনি কমান্ড চালানোর জন্য ব্যবহারকারীকে প্রম্পট করার চেষ্টা করবেন, কারণ ভীম কেবল বিভ্রান্ত হয়ে যাবে, বীপ এবং সন্নিবেশ মোডে প্রবেশ করবে।

তাই আপনাকে প্রথমে চালানোর জন্য কমান্ডের জন্য প্রম্পট করতে হবে, এটি একটি পরিবর্তনশীলতে সংরক্ষণ করুন, এবং তারপরে প্রক্রিয়াজাত আউটপুট সন্নিবেশ করান। এই সময়ে একটি ম্যাপিং ফাংশনটি সম্ভবত ম্যাপিংটিকে অযৌক্তিকভাবে নোংরা হতে দেওয়ার জন্য সম্ভবত প্রয়োজন, তাই আমরা এইরকম কিছু দিয়ে শেষ করব:

function InlineCommand()
    let l:cmd = input('Command: ')
    let l:output = system(l:cmd)
    let l:output = substitute(l:output, '[\r\n]*$', '', '')
    execute 'normal i' . l:output
endfunction

nmap <silent> \e :call InlineCommand()<CR>

মনে রাখবেন যে nmap ম্যাপিং তৈরি করে যা স্বাভাবিক মোডে টাইপ করা শুধুমাত্র কার্যকর হয়।

ঘটনাক্রমে, যদি আপনি কেবল তারিখ বা বর্তমান কাজ নির্দেশিকা সন্নিবেশ করতে চান তবে আমি যে প্রাথমিক উত্তর দিয়েছি তা কার্যকর। শুধু সন্নিবেশ মোড এবং টাইপ লিখুন নিয়ন্ত্রণ আর =strftime('%c') প্রবেশ করান অথবা নিয়ন্ত্রণ আর =getcwd() প্রবেশ করান


এটা সমাধান করার জন্য চেইন কমান্ড সম্ভব হবে। : আর! তারিখ | : - | জে বা আমি \ n \ n ^ [-:।! তারিখ \ n -JJ
Alexx Roche

4

আপনি যদি বর্তমান লাইনে এটি চান তবে আপনি কেবল চেষ্টা করুন, তবে মনে রাখবেন যে লাইনের পুরানো সামগ্রী মুছে ফেলা হবে:

:.!date

আপনি যদি সঠিক কার্সার অবস্থানটি চান তবে আপনি এটি করতে পারেন:

:let a=system("date") | let b=substitute(a,"[\r\n]*$","","g") | exec 'normal i'.b

লম্বা গল্প সংক্ষিপ্ত: আপনি ^ @ (নল অক্ষর) থেকে পরিত্রাণ পেতে চান এমন বিকল্পটি প্রতিস্থাপন করতে হবে যা আপনি .s / \% x00 // g এর সাথে প্রতিস্থাপন করতে পারেন। এটি কম পাইপগুলির সাথে একটি ছোট সংস্করণ:

:exec 'normal i'.substitute(system("date"),"[\n]*$","","")

এবং যদি আপনি একই লাইনে বিভিন্ন পয়েন্ট প্রতিস্থাপন করতে চান তবে ট্যাগগুলি সেট করতে পারেন:

এই লাইন দেওয়া 1:

1 Date: <datehere> and also <datehere>

এক্সিকিউট:

:let a=system("date") | exec ".s/<datehere>/".a."/g" | .s/\%x00//g

প্রতিস্থাপন করার পরে:

1 Date: jue ago 9 02:34:52 ART 2012 and also jue ago 9 02:34:52 ART 2012

ভীম 7.2 পরীক্ষা


1

আপনি আপনার .vimrc এই ধরনের জিনিস যোগ করতে পারেন:

" Insert the date in YYYY-MM-DD format inline just before cursor position (normal mode)
nnoremap <Leader>di me:r !date +\%F<CR>A <Esc>0D`ePJx
  • me বর্তমান অবস্থান চিহ্নিত করে।
  • :r !date +\%F<CR> YYYY-MM-DD বিন্যাসে পরবর্তী লাইনে তারিখ রাখে (আপনি এটি পছন্দ করতে পারেন তবে আপনি এটি পছন্দ করতে পারেন, কেবলমাত্র প্রতিটিকে পালিয়ে যান % সঙ্গে \ )।
  • A <Esc> তারিখ আউটপুট শেষে একটি স্থান যোগ করে।
  • 0D তারিখ মুছে ফেলা, `e আপনি চিহ্নিত অবস্থান ফিরে, এবং PJx কার্সারের আগে তারিখ রাখে, লাইন যোগ করে (নিচের খালিটি পরিত্রাণ পেতে) এবং পূর্ববর্তী স্থানটি হত্যা করে। আপনি উপযুক্ত দেখতে হিসাবে মানচিত্র সংশোধন করা।

আপনি সন্নিবেশ মোড থেকে এটি করতে চান, আমি আজ এই মণি পড়তে https://vimways.org/2018/the-mapping-business/

inoremap <C-g><C-t> <C-r>=strftime("%F")<CR>

আপনি আপনার প্রয়োজন অনুসারে তারিখ আউটপুট সংশোধন করতে পারেন ( man date এই সঙ্গে সাহায্য করতে পারেন)।


0

স্বাভাবিক মোডে (পালা / ঘুমের মোড) পেস্ট করুন

:exec 'normal i'.system("date \| tr '\n' ' '")

বর্তমান অবস্থানে তারিখ সন্নিবেশ পেতে। যদি আপনি কোন ক্যারেজ-রিটার্নের সাথে সেই লাইনটি অনুলিপি করেন তবে Shift + সন্নিবেশ আপনার তারিখ-সময় এখানে হয়ে যায়।

উপরন্তু আপনি একটি কমান্ড সঙ্গে F12 আবদ্ধ করতে পারেন

:inoremap <F12> <C-r>=system("date \| tr '\n' ' '")<CR>

সন্নিবেশ মোড সক্রিয় করার সময় আপনি ফাংশন-কি -12 দিয়ে তারিখ সন্নিবেশ করতে পারেন। আমি ব্যবহার করি

:inoremap DHRE <C-r>=system("date \| tr '\n' ' '")<CR>

(আমি ADHERE টি পেস্ট করার পরে DHERE থেকে পরিবর্তিত) কারণ আমি ইতিমধ্যে অন্য জিনিসগুলির জন্য F12 ব্যবহার করছি।

আমি ব্যবহার করি

grep -iE "dhere" /usr/share/dict/words

বিদ্যমান শব্দগুলির সাথে সুস্পষ্ট সংঘর্ষের জন্য চেক করার জন্য, যা আপনি ব্যবহার করতে অপেক্ষাকৃত নিরাপদ বলে মনে করেন:

:inoremap PWD <C-r>=system("pwd \| tr '\n' ' '")<CR>

(যদি না আপনি কিছু ডকুমেন্টেশন লেখা হয়।)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.