কিভাবে উল্লম্বভাবে লিখবেন?


22

বলি যে আমি আমার নথিতে নিম্নলিখিত পাঠ্য উত্পাদন করতে চাই:

%
%            Not Important
%    O ------------------------->
%    |
%  S |
%  o |
%  m |
%  e |
%    |
%  M |
%  s |
%  g |
%    |
%    V

প্রতিটি লাইনে প্রতিটি চরিত্রকে ম্যানুয়ালি toোকানো ছাড়া উপরের মতো উল্লম্বভাবে "কিছু এমএসজি" লেখার কোনও সহজ উপায় আছে?


5
আপনি স্বাভাবিক হিসাবে আপনার লেখা লিখতে পারে, এবং তারপর কি :s/./% \0\r/যোগ করার জন্য %এবং নতুন লাইন ... কোন একটা মহান সমাধান, যদিও ...
মার্টিন Tournoij

দুর্দান্ত সমাধান, এটি দারুণ কাজ করে। আপাতত এটি ব্যবহার করা হবে, আপনাকে ধন্যবাদ।
অ্যালান হাসেগওয়া

উত্তর:


16

সত্যিই ভাল সমাধান সম্ভবত আরও কিছু কাজ প্রয়োজন, কিন্তু "খারাপ না" অর্জন করা খুব কঠিন নয়।

ধারণা

আমাদের কেবলমাত্র প্রতিটি চরিত্রের পরে একটি লাইন নীচে সরানো দরকার, সুতরাং আসুন এটি InsertCharPreঅটো-কমান্ডের মাধ্যমেই করা যাক!

কোড

এটি .vimrcঅধীনে বা আরও ভাল আরও কিছু plugin/ডিরেক্টরি ডিরেক্টরিতে রাখুন।

" enters insert mode to write vertically
function! VertStart()
    augroup Vert
        autocmd!
        " handles each entered character and moves cursor down
        autocmd InsertCharPre * call feedkeys("\<left>\<down>", 'n')
        autocmd InsertLeave * call VertEnd()
    augroup END

    inoremap <BS> <Up><Del>
    startinsert
endfunction

" cleans up on leaving insert mode
function! VertEnd()
    iunmap <BS>
    augroup Vert
        autocmd!
    augroup END
endfunction

" command to start writing vertically
command! Vert call VertStart()

ব্যবহার

:Vertউল্লম্বভাবে লেখা শুরু করতে কমান্ড প্রবেশ করুন। সন্নিবেশ মোড ছেড়ে যাওয়া স্বয়ংক্রিয়ভাবে এই "মোড" অক্ষম করে। অবশ্যই আপনার যদি এই আদেশটি প্রায়শই ব্যবহার করতে হয় তবে আপনি এটি একটি শর্টকাটে মানচিত্র করতে পারেন।

জ্ঞাত সমস্যা

  1. আপনি যদি sertোকানো মোডের মাধ্যমে সন্নিবেশ মোডটি ছেড়ে দেন তবে উল্লম্ব লিখনটি অক্ষম করা হবে না Ctrl-C(এটি ইভেন্টের Ctrl-Cবিষয়ে কিছুটা অদ্ভুত উপায়ে কার্যকর হওয়ার ফলস্বরূপ InsertLeave, যা বরখাস্ত নয়; সুতরাং কীটি ব্যবহার করে সতর্ক হওয়া প্রয়োজন)।

1
জ্ঞাত সমস্যা # 1 এর প্রত্যাবর্তন: আপনার সন্নিবেশ মোডটি ছেড়ে যাওয়া উচিত নয় <C-C>
tommcdo

@ টমমকডো, আমি না, তবে এটি যদি সেখানে থাকে তবে কেউ এটি ব্যবহার করে। এটি সংক্ষিপ্তসার প্রসার এড়াতে আসলেই দরকারী, আমি ভাবছি কেন InsertLeaveএই কীটির জন্য ট্রিগার করা হয় না।
xaizek

1
আমি মনে করি আমার <C-C>সন্নিবেশ মোড থেকে প্রস্থান করার ভাল উপায় হিসাবে প্রত্যাখ্যান করার প্রবণতাটি প্রচার করার অর্থ । আপনি যেভাবে এটি উল্লেখ করেছেন তা বোঝাতে পারে যে এটি কখনও কখনও একটি ভাল পদ্ধতি। এটি "ক্যাভ্যাট:" বলার মতো, আপনি যদি কম্পিউটারটি আনপ্লাগ করে মাইক্রোসফ্ট ওয়ার্ড বন্ধ করেন তবে আপনার ডকুমেন্টটি সংরক্ষণ করা হবে না।
tommcdo

@ টমমকডো ভাবেন নি যে এটি এইভাবে শোনাবে। <C-C>সমস্যার কারণ হিসাবে একটি নোট যুক্ত করা হয়েছে। সংক্ষিপ্তসার প্রসারণ দমন করে সন্নিবেশ মোড ছেড়ে যাওয়ার জন্য আমি অন্য কোনও পদ্ধতি সম্পর্কে অবগত নই <C-C>, যদি সেখানে না থাকে তবে কমপক্ষে ম্যাপিংয়ের অংশ হিসাবে এটি দরকারী inoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
xaizek

আমি সংক্ষেপগুলি বিবেচনা করি নি, এটি একটি ভাল বিষয় point এমনকি সহায়তাতে আমি এমন কিছু জায়গা খুঁজে পেয়েছি যা <C-C>সংক্ষিপ্তসারগুলি প্রসারিত না করে sertোকানো মোড রেখে যাওয়া হিসাবে বর্ণনা করে এবং কীভাবে এটি InsertLeaveইভেন্টগুলিকে ট্রিগার করে না সে সম্পর্কে কোনও উল্লেখ নেই । এটি করার কোনও অন্তর্নিহিত উপায় থাকলে আমি এখন কৌতূহলী, তবে আপাতত আপনার ম্যাপিংটি দুর্দান্ত ধারণা।
tommcdo

4

আপনি যথারীতি টাইপ করতে পারেন এবং তারপরে অনুসরণ অনুসারে ভিমে প্রতিস্থাপন ব্যবহার করে বর্তমান অনুভূমিক পাঠ্যটিকে উল্লম্ব করে রূপান্তর করতে পারেন (বর্তমান লাইনে প্রযোজ্য):

:s/\(.\)/\1\r/g

বা পদ্ধতিটি মনে রাখা আরও সহজ হল নিম্নলিখিত কমান্ডগুলির মধ্যে একটি (সমস্ত লাইনের জন্য) কার্যকর করা:

:%!fold -w1
:%!grep -o .

কেবলমাত্র বর্তমান লাইন বা আরও লাইনগুলির জন্য প্রয়োগ করতে V, প্রয়োজন অনুসারে আরও রেখার জন্য অঞ্চলটি প্রসারিত করুন এবং উপরে (তবে ছাড়া %) চালিত করুন ।

উইন্ডোজ পাওয়ারশেলের জন্য, ভাঁজের জন্য বিকল্পটি পরীক্ষা করুন

সাধারণ কী ম্যাপিং (উদাহরণস্বরূপ F2) সংজ্ঞায়িত করতে নিম্নলিখিত চেষ্টা করুন:

:nnoremap <F2> V:!fold -w1<CR>

তারপরে কিছু টাইপ F2করুন এবং পাঠ্যটিকে উল্লম্বভাবে তৈরি করতে টিপুন ।


অন্যান্য বিকল্প হ'ল স্বয়ংক্রিয় শব্দের মোড়ক সেট করা eg

:set tw=1 " textwidth
:set formatoptions+=t

এটি স্বয়ংক্রিয়ভাবে পাঠ্যের মোড়ক হিসাবে 1 টি অক্ষরের কাছাকাছি সাদা স্থান অনুমতি দেয়। অসুবিধাটি হ'ল প্রতিটি চিঠির স্থান অনুসরন করা দরকার (সুতরাং এটি আপনি প্রায় চাপছেন ঠিক তেমনইEnter


1
পরিবর্তে :s/\(.\)/\1\r/g, আপনি কেবল ব্যবহার করতে পারেন :s/./\0\r/gযা কার্যত অভিন্ন।
ওয়াইল্ডকার্ড

1

আমি দেখতে পেয়েছি যে আপনি যদি নীল চাঁদে একাধিকবার না হয়ে আগ্রহী হন তবে ম্যাক্রোগুলি অস্বাভাবিক জিনিসগুলি করার দুর্দান্ত উপায় way ধরা যাক আপনার নীচের সারণী রয়েছে:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  S |
%  o | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    V

এবং আসুন আমরা আপনাকে এটির Some Msgসাথে প্রতিস্থাপন করতে চাই Other Message। প্রথমে, অতিরিক্ত অক্ষরের জন্য টেবিলটি প্রসারিত করা যাক (শেষের আগে লাইন yy5p:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  S |
%  o | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    |
%    |
%    |
%    |
%    |
%    V

পুরানো পাঠ্যটি প্রতিস্থাপন করার সময় আমি যে ম্যাক্রোটি নিয়ে আসছি তা অনুভূমিক থেকে উল্লম্ব রূপান্তরিত করার যত্ন নিতে চলেছে। প্রথম অবস্থানে পাঠ্যটি টাইপ করে শুরু করুন (কার্সারের শেষে রয়েছে Other Message):

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  SOther Message |
%  o | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    |
%    |
%    |
%    |
%    |
%    V

নিম্নলিখিত ম্যাক্রো রেকর্ড করুন:

  • qq: ম্যাক্রো নামের রেকর্ডিং শুরু করুন q
  • ^: লাইনের শুরুতে যান
  • 3l: পাঠ্যটি যে কলামটিতে যাচ্ছে সেখান থেকে যান
  • x: পুরানো চরিত্রটি মুছুন
  • l: পুরানো চরিত্রের জায়গায় বার্তা থেকে একটি অক্ষর রেখে ডানদিকে যান:
  • v: ভিজ্যুয়াল মোডে যান
  • f|: লাফ দাও |
  • 2h: দুটি অক্ষর ফিরে যান
  • d: নির্বাচন কাটা
  • j: নিচে যাও
  • P: কার্সারের আগে পেস্ট করুন
  • q: ম্যাক্রো রেকর্ডিং বন্ধ

এই মুহুর্তে আপনার কাছে:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  O |
%  other Message | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    |
%    |
%    |
%    |
%    |
%    V

পর্যাপ্ত পরিমাণে ম্যাক্রোর পুনরাবৃত্তি করুন (অর্থাত্ অক্ষরের সংখ্যা, তবে আপনাকে এটি আগাম জানা দরকার নেই Just তো চলুন সাথে যেতে 10@q। তুমি পাও:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  O |
%  t | So you can't just write your
%  h |
%  e | text and transform it into
%  r |
%    | the shape that you want
%  M |
%  e | Macros help here
%  s |
%  s |
%  a |
%   ge |
%    |
%    |
%    V

ঠিক আছে, আরও একটি ( @q):

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  O |
%  t | So you can't just write your
%  h |
%  e | text and transform it into
%  r |
%    | the shape that you want
%  M |
%  e | Macros help here
%  s |
%  s |
%  a |
%  g |
%   e |
%    |
%    V

আপনার কার্সার এখন শেষ e। ম্যাক্রোটি শেষ চিঠির সাথে ভালভাবে কাজ করে না (আপনি অসন্তুষ্টিজনক ফলাফলের জন্য চেষ্টা করতে পারেন @qএবং তারপরে u(পূর্বাবস্থায় ফিরতে পারেন))। কেবল এটি নিজেকে সামঞ্জস্য করুন ( Xব্যাকস্পেসের জন্য)।


খুব সুন্দর. ম্যাক্রোগুলি ভিমে যাওয়ার উপায়। আমার দ্রুত প্রয়াস মূলত আপনার মত একই ছিল; qq03lxldt|i ^[jPxq@q
ওয়াইল্ডকার্ড

@ উইল্ডকার্ড, আমি কি আপত্তি করতে পারি?
শাহবাজ

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