tmux কপি মোড - পাঠ্য ব্লক নির্বাচন করুন


39

আমি ভিআই কী দিয়ে টিএমউক্স ব্যবহার করছি, এবং আপনি যতক্ষণ না একটি টেক্সট লাইন নির্বাচন করছেন বা আপনার যদি কেবল একটি উইন্ডো রয়েছে ততক্ষণ অনুলিপি / পেস্টটি ঠিকঠাক কাজ করে। আমি যখন পাঠ্যের একটি ব্লক (একাধিক লাইন, তবে পুরো প্রস্থ নয়) নির্বাচন করতে চাই, তখন আমি সমস্যায় পড়ি। যদি আমার একাধিক ভিআইএম উইন্ডো খোলা থাকে তবে তা তাদের সমস্ত থেকে পাঠ্য নির্বাচন করবে এবং আমার যা প্রয়োজন তা হল কেবল একটি উইন্ডো থেকে পাঠ্য নির্বাচন করা। এটি, ভিএম-তে একটি ভিজ্যুয়াল সিলেক্টের মতো।

এটা কি সম্ভব?


আপনি কীভাবে টিএমউজে ভিআই কী-বাইন্ডিংগুলি সক্রিয় করবেন?
রোমেনেল

আপনার ~ / .tmux.conf থেকে "সেট উইন্ডো-বিকল্প -G মোড-চাবি ষষ্ঠ" যোগ
Srećko Toroman

1
দেখে মনে হচ্ছে উত্তরগুলি আপনার ভিজ্যুয়াল ব্লক মোড ব্যবহার করার প্রশ্নে উঠছে না - "একাধিক লাইন, তবে পুরো প্রস্থ নয়" এটিও আমি যা খুঁজছি। আপনি কি নিজের সমাধান খুঁজে পেয়েছেন?
ডেমোনপোলি

না, এখনও কোন সমাধান নেই।
স্রেইকো টোরোম্যান

আসলে, একটি সমাধান আছে।
স্রেইকো তোরোম্যান

উত্তর:


46

আপনার .tmux.conf ফাইলে প্রবেশ করা দরকার এমন প্রয়োজনীয় বাইন্ডিংগুলির জন্য এই পোস্টের নীচের অংশটি যাচাই করে নিন।

আমি ধরে নিচ্ছি আপনার উপসর্গ কীটি সিএ:

  • ক্যাচ মাধ্যম: প্রেস Ctrl+ +A
  • Ca [এর অর্থ: টিপুন Ctrl+ Aটিপুন[

একটি আয়তক্ষেত্র নির্বাচন করতেTmux এ (1,1) থেকে (2,2) পাঠ্যের করতে:

  • অনুলিপি মোডে যান: Ca [
  • একটি রেখার মাঝখানে সরান
  • সিভি চাপুন
  • স্পেস টিপুন
  • নির্বাচনটি JKL দিয়ে সরান
  • একবার আপনি আপনার নির্বাচনের সাথে সন্তুষ্ট হয়ে এন্টার টিপুন (বা y যদি আপনার কনফাইশন ফাইলে বাঁধাই থাকে)।
  • আপনি সর্বশেষতম অনুলিপি বাফার দ্বারা পেস্ট করতে পারেন: সিএ]

লক্ষ্য করুন যে টিপে space আয়তক্ষেত্র নির্বাচনের জন্য প্রয়োজনীয়।

আপনার পছন্দ মতো লাইনগুলি নির্বাচন করতে, অনুলিপি মোডে যান এবং v টিপুন, jkhl কী দিয়ে নির্বাচন করুন এবং y টিপুন।

আমার .tmux.conf এ এই বাইন্ডিংগুলি রয়েছে:

সংস্করণ 2.4 এর আগে (20 এপ্রিল 2017) :

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection     # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle  # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection      # Yank selection in copy mode.

সংস্করণ ২.৪ এর পরে :

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection     # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle  # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection      # Yank selection in copy mode.

ডিফল্ট আয়তক্ষেত্র-টগল বন্ধন আনবাইন্ড করা গুরুত্বপূর্ণ:

unbind-key -t vi-copy v  # Prior to version 2.4
unbind-key -T copy-mode-vi v

অন্যথায় নতুন 'সিভি' বাঁধাই কাজ করে না।

দ্রষ্টব্য: .tmux.confসংস্করণ জুড়ে কাজ করে এমন একক থাকতে , এই প্রশ্নটি দেখুন


1
তোমাকে অনেক ধন্যবাদ. জোর আপনার tmux.conf - আপনি শুরুতে বাইন্ড-কী -t vi-copy 'Cv' আয়তক্ষেত্র-টগল অন্তর্ভুক্ত করার জন্য উত্তরটি সম্পাদনা করতে পারেন।
স্রেইকো তোরোম্যান

মূল প্রশ্নটি জিজ্ঞাসা করে যে "মোড-কীগুলি vi" এর সাথে কীভাবে আয়তক্ষেত্রাকার নির্বাচন করা যায়। এই প্রশ্নের উত্তর দেওয়ার জন্য কীগুলি পুনরায় বাঁধতে হবে না। অন্যান্য উত্তর দেখুন; এটি কেবল "ভি" এবং নির্বাচন মোড থেকে "স্পেস"।
Lqueryvg

এটি jkhl কাজ করে না এমনটি ছাড়াও কাজ করে, আমাকে ঘুরতে তীর কীগুলি ব্যবহার করতে হবে, এটি পরিবর্তন করার কোনও উপায় আছে কি?
সর্বাধিক

sendএবং মধ্যে পার্থক্য কি send-keys। আমি superuser.com/questions/196060/selecting-text-in-tmux-copy-mode send-key ব্যবহার করা দেখছি । এছাড়াও উদ্ধৃতি চিহ্নগুলি গুরুত্বপূর্ণ?
ব্যবহারকারী 2442366

15

নির্বাচন vশুরু করার আগে আপনি vi তে টাইপের মতো একটি ভিজ্যুয়াল ব্লক নির্বাচন করতে পারেন । ম্যানপেজে এইটিকে "আয়তক্ষেত্র টগল" বলা হয়।


2
ঠিক আমি কি ব্যবহার করছি। তবে এতে একটি সমস্যা রয়েছে যা আমি উপরে বর্ণনা করেছি। আয়তক্ষেত্রটি সর্বদা পূর্ণ প্রস্থে থাকে। (X2, Y2) :) - আমি একটি vim-মত আয়তক্ষেত্র (X1, Y1) প্রয়োজন
Srećko Toroman

1
@ স্রেইকো টোরোমেন সম্পূর্ণ প্রস্থের সাথে ঠিক কী বলতে চাচ্ছেন?
গীতারিক

9

লারস যেমন উল্লেখ করেছে, vআসলে আয়তক্ষেত্র মোড এবং পূর্ণ-লাইন নির্বাচন মোডের মধ্যে টগল করে আপনি যা যা চেয়েছিলেন তা করে does spaceএবং enterযথাক্রমে একটি নতুন নির্বাচন শুরু করতে এবং এটি অনুলিপি করতে ব্যবহৃত হয়। আপনার উপসর্গটি অনুসরণ করে অনুলিপি মোড প্রবেশ করুন এবং ব্যবহার [করে কোনও অনুলিপি উইন্ডোতে আপনার অনুলিপি নির্বাচন আটকে দিন]

vভিএম হিসাবে কাজ করে থেকে এটি আমাকে বিভ্রান্ত করেছেspace টিএমউক্সে করে, নির্বাচন শুরু করতে।

Tmux :list-keys -t vi-copyএ ইস্যু করা অনুলিপি মোডে কমান্ডের পুরো টেবিল প্রদর্শন করবে।

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down

আমি আবার এটি না। উল্লম্ব বিভাজন সহ একটি ভিম উইন্ডো দেওয়া হয়েছে, আপনি কেবল প্রথম বিভাজনে একটি আয়তক্ষেত্রটি কীভাবে নির্বাচন করবেন? এখানে, মাল্টলাইন আয়তক্ষেত্রটি সর্বদা পূর্ণ Tmux ফলকে আবদ্ধ করবে। এটি কোনও ভিম ​​ব্লক নির্বাচনের মতো নয়। আমি tmux 1.5 ব্যবহার করছি, সম্ভবত এটি আপনার সংস্করণে আলাদা?
Srećko Toroman

হ্যাঁ, এখানে, ভি-টি শুরু-নির্বাচনের জন্য ম্যাপ করা হয়েছে। আয়তক্ষেত্র-টগল অপরিজ্ঞাত। সুতরাং আমি অনুমান করি যে আপনি উভয়ই ঠিক আছেন, আমার ক্লায়েন্টটি আপডেট করা দরকার?
Srećko Toroman

আপনার যদি একটি একক টিএমাক্স ফলকে একটি বিভক্ত উইম উইন্ডো খোলা থাকে, আপনি কি ভিমের ইয়াঙ্ক এবং পেস্টের ক্ষমতা ব্যবহার করতে পারবেন না? অন্যদিকে আপনার কাছে দুটি টিএমউक्स প্যান রয়েছে, যার প্রত্যেকটির নিজস্ব ভিআইএম উইন্ডো রয়েছে, tmux নির্বাচন / অনুলিপিটি পেন প্রান্তগুলিতে মোড়ানো করতে সক্ষম হওয়া উচিত। আমি tmux 1.7 ব্যবহার করছি
এখানে

6

যেহেতু অন্য উত্তরগুলির কোনওটিই সমস্যার অনুকূল সমাধান দেয় না, তাই আমি নেক্রোম্যান্সির notর্ধ্বে নই।

স্পেস টিপে না রেখে ব্লকের বাছাইয়ের কাজ যেমনভাবে ভিমে হয় তেমনভাবে করার একটি উপায় রয়েছে। আপনার পেশী স্মৃতিতে অন্তর্ভুক্ত কেবল একটি সাধারণ সিটিআরএল-ভি।
এটিতে আপনার .tmux.conf সম্পাদনা প্রয়োজন (তবে ভিআই-মোড ব্যবহার করে এটি ইতিমধ্যে হয়েছে) এবং আমি নিশ্চিত নই যে এটি tmux <2.4 এর জন্য কাজ করে।

ভিএম নির্বাচন এবং ইয়াঙ্ক বাইন্ডিংয়ের প্রতিরূপ তৈরি করতে এটি আপনার .tmux.conf এ যুক্ত করুন:

# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

নির্বাচন মোড প্রবেশ করুন এবং আপনি যেখানে নির্বাচন শুরু করতে চান সেখানে নেভিগেট করুন। এখন vনিয়মিত শুরু হয় (চরিত্র অনুসারে অক্ষর, লাইন অনুসারে) নির্বাচন, <C-v>ব্লক নির্বাচন শুরু হয় এবং V(শিফট-ভি) শুরু করে লাইন নির্বাচন। নির্বাচনের ধরণ নির্বিশেষে, yইয়ঙ্কস থেকে টেমাক্স পেস্ট বাফার (বা এক্স ক্লিপবোর্ড; উপরে কোডের মন্তব্যগুলি দেখুন)।

ভিম হিসাবে একই।


আমার জন্য কাজ করেছেন, আপনার প্রতিযোগিতার প্রতি উত্সাহ দিন ma
মাহেমফ

2

সম্পাদনা: উত্স কোডটি যাচাই করার পরে, আমি আমার উত্তরটি পুরোপুরি আবার লিখেছি।

আমি প্রাথমিকভাবে ভেবেছিলাম এটি সম্ভব হয়নি কারণ আমি এটি কাজ করতে পারি না, তবে অন্যান্য উত্তরগুলি এর vসঠিক কী হওয়ার বিষয়ে সঠিক, তবে এটি কীভাবে ব্যবহার করা যায় তা স্পষ্ট নয়, বিশেষত আপনি যদি ভিমে ব্যবহৃত হয়।

এছাড়াও, এটি আমার পক্ষে কাজ করে না কারণ আমার vআবদ্ধ ছিল begin-selection- আমি মনে করি চরিত্র অনুসারে বাছাইয়ের শুরু করার জন্য ভিআইم উপায়টি অনুকরণ করার জন্য আমি অবশ্যই অন্য কোনও জায়গা থেকে এই ধারণাটি অন্ধভাবে অনুলিপি করেছিলাম, না জেনেও এটি রাস্তায় আরও সমস্যা সৃষ্টি করবে with ব্লক নির্বাচন।

$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy  | grep " v "
bind-key -t vi-copy      v begin-selection     # suppressed my block selection mode

একবার আমি এই .tmux.confবাঁধাইটি কেড়ে নিলাম (আমার এবং tmux পুনরায় চালু করার মাধ্যমে) এটি কাজ করা শুরু করে, তবে এটি এখনও বিভ্রান্তিকর কারণ এটি একেবারে ভিমের মতো নয়।

ডিফল্ট বাইন্ডিং সহ, এটি নিম্নলিখিত হিসাবে কাজ করা উচিত:

  1. নিশ্চিত করুন যে আপনি tmux সঙ্গে unning আছে করুন setw -g mode-keys viআপনার .tmux.conf
  2. C-a [কপি মোড শুরু করতে টাইপ করুন
  3. যেখানে আপনি নির্বাচন শুরু করতে চান সেখানে কার্সারটি সরান
  4. আদর্শ v
  5. আদর্শ Spaceনির্বাচন শুরু করতে
  6. কার্সারটি সরান এবং আপনি একটি আয়তক্ষেত্রাকার নির্বাচন দেখতে পাবেন
  7. আপনি vনির্বাচনটি আবার অক্ষর অনুযায়ী নির্বাচন বা তদ্বিপরীত থেকে টগল করতে টিপতে পারেন ।

vচাপ দেওয়ার আগে আপনাকে টাইপ করতে হবে না Space। আপনি Spaceপ্রথমে অক্ষর অনুসারে নির্বাচন শুরু করতে পারেন এবং vপরে আয়তক্ষেত্রাকার নির্বাচন মোডে টগল করতে টিপতে পারেন।

এটি ভিএম থেকে একেবারে আলাদা যে টিএমউক্সে আপনাকে দুটি অক্ষর টাইপ করতে হবে : Spaceএবং vআয়তক্ষেত্রাকার নির্বাচন মোডে যেতে। ভিমে আপনাকে কেবল টাইপ করতে হবে Ctrl-V

এছাড়াও ভিমে vএকটি অক্ষর-ভিত্তিক নির্বাচন শুরু হয়, অবরুদ্ধ নয়।

দুঃখজনকভাবে, tmux ( Shift-vভিমে) তে কোনও লাইন-ভিত্তিক নির্বাচন মোড বলে মনে হচ্ছে না ।
সম্পাদনা: দেখে মনে হচ্ছে Tmux সংস্করণ ২.০ একটি লাইন ভিত্তিক নির্বাচন মোড সরবরাহ করে Shift-v(যদিও আমি এখনও এটি চেষ্টা করি নি!)


"V" টিপুন এবং আপনি লাইন নির্বাচন করতে পারেন। জায়গার দরকার নেই।
আমির এইচ। সাদুফি

1
@ আমির এইচ। সাদোফি, কারণ এটি (আপনার উত্তর অনুসারে) আপনি ডিফল্ট পরিবর্তন করেছেন এবং "স্পেস" এর পরিবর্তে নির্বাচন শুরু করতে "ভি" আবদ্ধ হয়েছেন। আপনি যদি একটি খালি .tmux.conf দিয়ে শুরু করেন তবে আমার বর্ণিত আচরণটি সঠিক খুঁজে পাওয়া উচিত; নির্বাচন শুরু করতে আপনাকে "স্পেস" টিপতে হবে।
Lqueryvg

1
আমাকে সংশোধন করার জন্য ধন্যবাদ। আপনার শেষ বাক্যটি (লাইন ভিত্তিক নির্বাচন সম্পর্কে) সম্বোধন করার জন্য, আমি বলার চেষ্টা করছিলাম যে আমার কনফিগারেশনের সাহায্যে আমি সিভি-স্পেসের সাথে একটি ব্লক নির্বাচন করতে পারি, এবং আমি v। দিয়ে একটি লাইন নির্বাচন করতে পারি, তাই "উপসর্গটি টিপুন" "আমাকে লাইনগুলি নির্বাচন করতে দেয়।
আমির এইচ। সাদুফি

আমার বিশ্বাস করা খুব কঠিন যে কারণ লাইন-ভিত্তিক নির্বাচনটি কেবলমাত্র টমাক্সে সম্প্রতি যুক্ত করা হয়েছিল ( Shift-v২.০ মার্চ ২০১৫ প্রকাশিত হয়েছে), অবশ্যই আমার উত্তরের পরে এবং আপনার মূল উত্তরের অনেক পরে। আমরা যখন লাইন-ভিত্তিক নির্বাচনের বিষয়ে কথা বলি তখন সম্ভবত আপনি এবং আমি দুটি ভিন্ন বিষয় নিয়ে কথা বলছি। দয়া করে VIM 3 নির্বাচন মোড সঙ্গে তুলনা (সঙ্গে v, Shift-vএবং Ctrl-v)।
Lqueryvg

আপনি ঠিক বলেছেন, আমি এটি পরীক্ষা করেছি। আমার vনির্বাচন চরিত্রবান। আমি সংস্করণ 1.9a এ আছি এবং ভিমের মতো লাইনের মতো নির্বাচন নেই। সুতরাং, সংস্করণ ২.০ সহ, ঠিক তিনটি মোড যে ভিমে রয়েছে tmux তেও সম্ভব, তাইনা?
আমির এইচ। সাদুফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.