সন্নিবেশ মোডে <CR>> পূর্বাবস্থায় ফেরান


21

কখনও কখনও সন্নিবেশ মোডে আমি <CR>ভুল করে আঘাত করি এবং আমি যেখানে ছিলাম সেখানে ফিরে আসতে আমাকে একাধিকবার (ইনডেন্টের উপর নির্ভর করে) আঘাত করতে হবে।

যেমন

<div>
  <p> This is some text []</p>
</div>

কার্সারটি হ'ল []এবং আমি আঘাত করেছি <CR>:

<div>
  <p> This is some text 
  []</p>
</div>

আগের লাইনে ফিরে যাওয়ার জন্য এখন আমাকে দুবার ব্যাকস্পেসে আঘাত করতে হবে (এই মামলাটি তেমন খারাপ নয় তবে এতে প্রচুর ইনডেন্টেশন নেই)।

আপনি কি আরও ভাল উপায় জানেন?


1
ctrl+wদুবার কাজ করা এবং বেশ সহজ বলে মনে হচ্ছে
reergymerej

উত্তর:


10

কেমন:

inoremap <C-\> <C-o>:left 0<Cr><BS>

<C-o>একটি সাধারণ মোড কমান্ড ( :left 0) চালিত করবে, যা সমস্ত ইনডেন্ট সরিয়ে ফেলবে, এটি আপনার কার্সারটিকে লাইনের শুরুতে রাখবে। <BS>আপনাকে শেষ লাইনে ফিরিয়ে আনবে

এটি কিছুটা "পিছনের দিকে J" এর মতো।

দুর্ভাগ্যক্রমে, শিফট + এন্টার বা সিটিআরএল + এন্টার ম্যাপিং সম্ভব বলে মনে হচ্ছে না, তাই আমি <C-\>"প্রবেশের কাছাকাছি" হিসাবে বেছে নিই ।


"প্রবেশের কাছাকাছি" আপনার কীবোর্ডের উপর নির্ভর করে: ইউ কে এর বাম-হাতের শিফটের পাশে `
have রয়েছে

2
<C-u>পরিবর্তে ব্যবহার করবেন না কেন <C-o>:left 0<CR>?
জামেসান

@ জামেসান এটি "পিছনের দিকে J" হিসাবে কাজ করে : তাই foo<CR>bar<C-\>আপনাকে ছেড়ে দেবে foobar। আইএমএইচও এটি আরও কার্যকর, তবে ওয়াইএমএমভি।
মার্টিন টর্নয়েজ

ঠিক আছে, তবে আমি যা বলছি তা হ'ল <C-u>(যেমন, i_CTRL-U ) এর মতো হওয়া উচিত <C-o>:left 0<CR>
জামেসান

1
@ জামেসান ওয়েল, এটি কার্সারের অবস্থানের উপর নির্ভর করে। টাইপিং foo<CR>bar<C-u>আপনাকে ছেড়ে যাবে foo<CR>(+ ভিমে যোগ করা হতে পারে এমন কোনও স্ব-ইন্ডেন্ট)। <C-o>:left 0<CR>কার্সার অবস্থান নির্বিশেষে সর্বদা একই আচরণ করবে।
মার্টিন টর্নয়েজ

21

আমার মধ্যে এটি আছে vimrc, দ্বিতীয় অংশটি প্রাসঙ্গিক:

inoremap <expr> <silent> <cr> pumvisible() ? "<c-y>" : "<c-g>u<cr>"

এটি কী করে: প্রতিবার আপনি Enterসন্নিবেশ মোডে আঘাত করলে , এটি "পূর্বাবস্থায় ফিরে আসা ক্রমটি ভেঙে, নতুন পরিবর্তন শুরু করবে" (দেখুন h: i_CTRL-G_u)। এই মানে, যদি আপনি আঘাত Enterভুল করে, আপনি পারেন এখন পূর্ববর্তী সন্নিবেশিত লাইন অপসারণ ছাড়া আপনার পরিবর্তন, নয়তো সঙ্গে পূর্বাবস্থা ESC u a, অথবা Ctrl-o u, যেমন Statox প্রস্তাব দেয়। মূলত, প্রতিটি লাইন পৃথকভাবে পূর্বাবস্থায় ফেরা যায়।

সূত্র

সম্পাদনা / আপডেট: আপনি যদি ইমাসে ভিম এমুলেশন ব্যবহার করেন, ওরফে অবিশ্বাস্য-মোড , আপনি অনুরূপ প্রভাবের জন্য এই প্যাকেজটি ব্যবহার করতে পারেন ।


এখন আমি প্রথম অংশ এবং কীভাবে <c-y>পপ-আপ মেনুতে সম্পর্কিত তা সম্পর্কে আগ্রহী ।
বিট্রি

2
এই উত্তরটি দেখুন: vi.stackexchange.com/a/3844/1800Ctrl-yসন্নিবেশ মোডটি বর্তমান পপআপ নির্বাচনটি সম্পূর্ণ করবে এবং উপরের ম্যাপিংটিও Enterসম্পূর্ণ করতে অনুমতি দেবে ।
ভ্যানলাসার

দুর্দান্ত কৌশল। যাইহোক, আমি সম্ভবত শেষ অংশ প্রতিস্থাপন চাই "<c-g>u<cr>"দ্বারা &paste ? "<cr>" : "<c-g>u<cr>", অন্যথায় পরের বার আপনি যখন ভুল করে পেস্ট করুন HTML এর 200 লাইন আপনি এটা পূর্বাবস্থায় ফিরিয়ে আনার অনেক মজার হবে। :)
lcd047

2
... এবং ব্যাখ্যা: যখন pasteচালু থাকে, সন্নিবেশ মোড ম্যাপিংগুলি অক্ষম করা হয় (
ভিমের

1
আমি এই সমাধানটি আরও ভাল পছন্দ করি কারণ backspaceবিকল্পগুলি কীভাবে সেট করা আছে তার উপর নির্ভর করে বাক্সস্পেস, সিটিআরএল-ডাব্লু এবং সিটিটিএল-ইউ-তে নির্ভর করে অন্যান্য সমাধানগুলি কাজ নাও করতে পারে ।
ডাবলডাউন

4

আমি যেভাবে এটি করি Ctrl-wBackspace

Ctrl-wশেষ শব্দটি মুছে ফেলার জন্য (আমি ভুলে গেছি এটি যদি স্ট্যান্ডার্ড ভিএম না হয় তবে) এবং এটি কেবল ফাঁকা স্থান থেকে এটি আমাকে লাইনের শুরুতে ফিরিয়ে আনবে। তারপরে Backspaceআমাকে যেখানে ছিল আমি আগের লাইনে ফিরিয়ে আনব।


মিষ্টি, আমি Ctrl-wসন্নিবেশ-মোডে ব্যবহার সম্পর্কে জানতাম না । তবে কার্পেটস্মোকার still এখনও দ্রুত। সুতরাং `Ctrl-` default এর ডিফল্ট বাঁধাই কার্যকর বলে মনে হয় না।
nobe4

1
Ctrl + W "মান তেজ" ;-) দেখুন হল: :help i_CTRL-W। এবং এটি দুবার টিপলে মনে হয় কৌতুকটিও কি করবে?
মার্টিন টর্নয়েজ

1
আমি কেবলমাত্র সাহায্যের পৃষ্ঠায় দেখেছি যা <C-u>আরও কার্যকর হতে পারে কারণ এটি নতুন লাইনের সমস্ত অক্ষর মুছে ফেলে
নবেব

1

এ থেকে আমার উপায় হ'ল (সন্নিবেশ মোড থেকে) UpCtrl-oJDel। সম্ভবত সবচেয়ে দক্ষ সংমিশ্রণ নয়, তবে এটি সম্পর্কে চিন্তা না করেই আমি যা করছি।


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