আমি ভিমে সাধারণ এবং সন্নিবেশ মোডের মধ্যে কার্সারটি কীভাবে পরিবর্তন করব?


111

আমি কীভাবে পরিবর্তন করতে হবে তা জানতে চাই, যদি সম্ভব হয় তবে আপনি কী মোডে আছেন তার উপর নির্ভর করে ভিমে কার্সার (রঙ, আকার, ইত্যাদি)।

আমি ক্রমাগত ভুলে যাচ্ছি যে আমি সন্নিবেশ মোডে নেই এবং কোড টাইপ করা শুরু করি, যার ফলশ্রুতিতে সমস্ত ধরণের পাগল ঘটনা ঘটে। কার্সারে যদি কোনও ধরণের ভিজ্যুয়াল ইঙ্গিত থাকে তবে এটি সহায়ক হবে।


20
আমি আপনাকে একটি নিয়ম শিখতে পরামর্শ দিই: টাইপ করা বন্ধ করুন => প্রস্থান সন্নিবেশ মোডে। তারপরে আপনি কখনই এমন পরিস্থিতি পর্যবেক্ষণ করবেন না যেখানে আপনি ভুলে গিয়েছিলেন যে আপনি সন্নিবেশ মোডে নেই।
জাইএক্স

4
আপনি টাইপ করা বন্ধ করার পরে সন্নিবেশ মোডটি থেকে বেরিয়ে যেতে ভুলে যাবেন না বাদে @ জাইএক্স : পি
জেনেট

4
@ জাইএক্স এটি একটি সূক্ষ্ম নিয়ম এবং আমি সর্বদা এটি করেছিলাম তবে ভিজ্যুয়াল সূচকগুলি এখনও গুরুত্বপূর্ণ। মারিজুয়ানা এখন আইনী এবং আমি কী করি তা আমি ভুলে যাই।
17:42

উত্তর:


110

সন্নিবেশ মোডে এবং এ থেকে স্যুইচিং নির্দেশ করার জন্য একটি জনপ্রিয় পদ্ধতির cursorlineবিকল্পটি টগল করা হচ্ছে , যা বর্তমান স্ক্রীন লাইনটি হাইলাইট করা হয়েছে কিনা তার জন্য দায়ী (দেখুন :help cursorline):

:autocmd InsertEnter,InsertLeave * set cul!

বা, বিকল্পভাবে:

:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul

CursorLineআপনার পছন্দ অনুসারে কার্সার লাইনের স্টাইলিং পরিবর্তন করতে হাইলাইটিং গ্রুপটি সংশোধন করুন (দেখুন :help :highlightএবং :help highlight-groups))


6
আমি ডিফল্ট আন্ডারলাইনটির পরিবর্তে হাইগলাইট বিগিতে কুলকে সেট করেছি: হাই কার্সরলাইন সিটার্ম = কোনও নয় সিটিএমবিজি = কালো
নিকিতা প্রকোপাভ

সাইগউইনের ভিমে এটি কাজ না করার কোনও কারণ আছে কি? আমি সম্পাদকটিতে আছি এবং উভয় লাইনের লাইন প্রবেশ করলাম, এবং আমি পুরো কলাম বা সারি হাইলাইটিংয়ের বাইরেও কোনও ধরণের হাইলাইট সেট করতে সক্ষম
হইনি

@ ট্যাঙ্কোর: cursorlineবিকল্পটি কোনও প্ল্যাটফর্ম-নির্দিষ্ট সক্ষমতার উপর নির্ভর করে না; এটি +syntaxবৈশিষ্ট্যটির সাথে সংকলিত যেকোন ভিম ইভেন্টে উপলব্ধ (যা সাধারণত ক্ষেত্রে হয়)।
ইব।

অবশ্যই, জো-এর মতো স্থায়ীত্বের জন্য এটি আপনার ~ / .vimrc এ সংরক্ষণ করুন:echo 'autocmd InsertEnter,InsertLeave * set cul!' >>~/.vimrc
আলকেমি

79

নিম্নলিখিতটি লিনাক্সে এক্সটার্ম, urxvt, এবং অন্যান্য টার্মিনাল এমুলেটরগুলিতে কাজ করে; ম্যাকোজে আইটার্ম 2; উইন্ডোজে কনেমুর সাথে গিট বাশ; এবং আরও (মন্তব্য দেখুন):

let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"

" Optionally reset the cursor on start:
augroup myCmds
au!
autocmd VimEnter * silent !echo -ne "\e[2 q"
augroup END

অন্যান্য বিকল্প (পরে নম্বরটি প্রতিস্থাপন করুন \e[):

Ps = 0  -> blinking block.
Ps = 1  -> blinking block (default).
Ps = 2  -> steady block.
Ps = 3  -> blinking underline.
Ps = 4  -> steady underline.
Ps = 5  -> blinking bar (xterm).
Ps = 6  -> steady bar (xterm).

আপনি যখন tmux ব্যবহার করেন , তখন এটির মতো ( \<Esc>Ptmux;অব্যাহতি ছাড়াই ) ব্যবহার করা গুরুত্বপূর্ণ । আপনি উইন্ডোজ / প্যানগুলি স্যুইচ করলে tmux সঠিক কার্সার আকারের উপর নজর রাখবে।

যদি এটি আপনার পক্ষে কাজ করে না, TERM=xterm-256colortmux শুরু করার আগে সেট করার চেষ্টা করুন , বা এটি আপনার .tmux.conf( স্টিভেন লু ধন্যবাদ ) যুক্ত করুন:

set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'

4
এখন অ্যালক্রিটিতে দুর্দান্ত কাজ করে
স্টিভেন লু


@ চারেলস কেন এটি পুট্টিতে কাজ করে না সে সম্পর্কে এটি দেখুন: superuser.com/questions/304318/…
ওয়েস্টার্নগান

4
আমার আপডেট: অবশেষে set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'আমার টিএমএক্স কনফিগারেশনে কাজ করছি। স্পষ্টতই যদি আপনি বাইরে ব্যবহার setকরেন তবে terminal-overridesএটি -aসেটিংসটিকে ওভাররাইড করবে, যা ইতিমধ্যে এটি ডিফল্টরূপে রয়েছে।
স্টিভেন লু

4
সমাধানটি সরল টার্মিনালে
suোকানো

16

আপনি ব্যবহার করে থাকেন tmux এবং iTerm2 উপর MacOS ,
নিম্নলিখিত একটি কার্সার এবং হাইলাইট বর্তমান লাইন করার জন্য একটি ব্লক থেকে কার্সার পরিবর্তন

if exists('$TMUX')
  let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
  let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
else
  let &t_SI = "\<Esc>]50;CursorShape=1\x7"
  let &t_EI = "\<Esc>]50;CursorShape=0\x7"
endif
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul

ক্রেডিট: https://gist.github.com/andyfowler/1195581


4
নোট করুন এটি আইটার্মের সাথে নির্দিষ্ট । যেহেতু মানকগুলি আসলে কাজ করে তবে অন্যান্য সমস্ত সহায়ক টার্মিনালগুলিতেও কাজ করে, সম্ভবত এটি ভুল উত্তর। এখানে দেখুন -> স্ট্যাকওভারফ্লো.com
স্টিভেন লু

@ স্টিভেনলু আসলে প্রস্তাবিত উত্তরের উত্তরটি আইটার্ম 2 (ম্যাক) এর জন্য কাজ করেনি, যখন তিনি এই কাজ করেছিলেন। এই স্টাফটি আপনি প্রত্যাশার চেয়ে বেশি মজাদার।
সিএস

এই কার্সার স্টাফগুলি অবশ্যই বাহ্যিক এক ধরণের জিনিস is আমি কেবল বুঝতে পেরেছি যে এমনকি আমার একটি সঠিক সেটআপ রয়েছে বলেও মনে করবেন না, কারণ টিএমউক্স কার্সার স্টেট ট্র্যাকিংয়ের মতো বলে মনে হচ্ছে না যা কিছু উত্তর সম্ভবত একটি সম্ভাবনা বলে চিহ্নিত করে। আমি সন্নিবেশ মোডে একটি লাইনটিতে কার্সারটি হ্যান্ডেল করতে ভিআইএম পেতে যথেষ্ট পরিমাণে খুশি হয়েছিলাম।
স্টিভেন লু

আমি এই জিনিস আউট। সমাধানটি হ'ল tmux এটি সঠিকভাবে পরিচালনা করার জন্য টুইঙ্ক করা, এবং এটি অ-স্পষ্টত হতে পারে। আমার টিএমক্স কনফিগারেশনটি terminal-overridesকেবলমাত্র যুক্ত করা হয়েছে তা নিশ্চিত করার জন্য আমার যা করা দরকার ছিল তা যাতে ,*:Ss=\E[%p1%d q:Se=\E[2 qঅংশটি আঁকড়ে না যায় terminal-overrides। সুতরাং আমার কনফিগারেশনটি দেখতে দেখতে set -sa terminal-overrides ",xterm-256color-italic:Tc"(কার্সার শৈলীগুলি এসএস / সেয়ে ট্র্যাম্পলিং না করে সক্ষম করে 24-বিট রঙ সেট করতে
স্টিভেন লু

13

বিভিন্ন মোডে কার্সারের আকার পরিবর্তন করতে, আপনি নিজের .vimrcফাইলটিতে নিম্নলিখিতগুলি যুক্ত করতে পারেন ।

জিনোম টার্মিনালের জন্য (সংস্করণ ২.২26):

if has("autocmd")
  au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
  au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
  au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
endif

আপনি যদি জিনোম টার্মিনালে একাধিক প্রোফাইল ব্যবহার করেন তবে আপনাকে এটি আপনার প্রোফাইলে মানিয়ে নিতে হতে পারে।

কেডি 4-তে কনসোলের জন্য:

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

এটি একাধিক ট্যাব এবং উইন্ডো নিয়ে কাজ করে।

আরও দেখুন: ভিম টিপস উইকিতে " বিভিন্ন পদ্ধতিতে কার্সার আকার পরিবর্তন করুন" ।


13
আমি মূলত পুটি সহ এসএমএস-এর ওপরে tmux-এ vim ব্যবহার করি। আরও কি সার্বজনীন বিকল্প আছে?
ল্যানরাট

কবজির মতো কাজ করেছেন। ধন্যবাদ
আর্নেস্ট

4
Gconftool-2 কমান্ডের মাধ্যমে জিনোম-টার্মিনালের সেটিংস পরিবর্তন করা খুব খারাপ ধারণা। এটি কেবলমাত্র সেই টার্মিনালকেই প্রভাবিত করে না যেখানে আপনার ভিএম চলছে, তবে একই প্রোফাইলের অন্যান্য বর্তমান এবং ভবিষ্যতের জিনোম-টার্মিনাল ট্যাবগুলিকেও প্রভাবিত করে না।
egmont

এটি কনসোলের জন্য কাজ করে, আপনাকে ধন্যবাদ। তবে একটি বিষয় হ'ল সন্নিবেশ মোডটি স্লোও, এটি কেন নিশ্চিত নয়
হোয়াং ট্রান

4
@HoangTran ব্যবহারset ttimeoutlen=0
Bananach

10

আপনি টার্মিনাস ভিম প্লাগইন চেষ্টা করতে পারেন :

সন্নিবেশ মোডে, কার্সার আকারটি একটি পাতলা উল্লম্ব বারে পরিবর্তিত হয়। প্রতিস্থাপন মোডে, এটি একটি নিম্নরেখায় পরিবর্তিত হয়। স্বাভাবিক মোডে ফিরে আসার পরে, এটি স্ট্যান্ডার্ড "ব্লক" আকারে ফিরে আসে।


এটি সবচেয়ে বোধগম্য সমাধানের মতো বলে মনে হচ্ছে। একটি থাকতে হবে: আদর্শ ভিএম এ সরাসরি এটির জন্য সেট করুন।
ব্যবহারকারী 12711

প্রয়োজনীয়তা: জিনোম-টার্মিনাল ( উইকি.গনোম.অর্গ / অ্যাপস / টার্মিনাল ) এবং ভিটিই লাইব্রেরি ব্যবহার করে অন্যান্য টার্মিনালগুলি ( github.com/GNome/vte ): আংশিকভাবে সমর্থিত (উদাহরণস্বরূপ, কার্সার আকার পরিবর্তনগুলি সমর্থন করে তবে ফোকাস রিপোর্টিং নয়)। আমার ক্ষেত্রে (জিনোম-টার্মিনাল 3.6.2) এটি মোটেও কাজ করে না।
দাগো

9

আমি কেবল সন্নিবেশ মোডে কার্সার জ্বলতে এবং এটি অন্যান্য মোডে স্থির রাখতে দরকারী বলে মনে করি।

set guicursor+=n-v-c:blinkon0

4

নিশ্চিত না যে আঘাত করার পরে অন্য কেউ দেরি করছেন Esc ব্লক কার্সারটি দেখানোর জন্য স্বাভাবিক মোডে ফিরে যেতে চাবিটি তবে যদি তা হয় তবে আমি এটিও ঠিক করেছি।

আসলে আমি আইটির্ম 2 ব্যবহার করছি এবং ম্যাকোজে আমার টার্মিনালের ভিতরে ভিম ব্যবহার করছি। এবং সন্নিবেশ মোডে প্রবেশ করার সময়, কার্সারটি এখনও একটি ব্লক হয়ে থাকে এবং আপনি যখন সন্নিবেশ মোডে বা স্বাভাবিক মোডে থাকেন তখন ধরণের বিভ্রান্তিকর হয়।

আমি সন্নিবেশ মোডে এবং ম্যাকভিম যেমনটি সাধারণ মোডে তখন ফিরে আসার জন্য কার্সর হিসাবে একটি পাতলা রেখা প্রদর্শন করতে চেয়েছিলাম। এবং এটি করার জন্য এটি বেশ সহজ, এখানে বর্ণিত.vimrc হিসাবে এটি কেবল আমার ফাইলে যুক্ত করেছেন :

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

এখানে চিত্র বর্ণনা লিখুন

তবে আপনি দেখতে পাচ্ছেন ESCযে inোকানো মোডটি আবার স্বাভাবিক মোডে ফিরে যেতে এবং আবার কার্সর হিসাবে ব্লকটি দেখানোর জন্য হিট করার সময় একটি বিলম্ব হয়েছিল । সুতরাং এটি ঠিক করার জন্য আমি এটি পেয়েছি:

set ttimeout
set ttimeoutlen=1
set listchars=tab:>-,trail:~,extends:>,precedes:<,space:.
set ttyfast

আপনি দেখতে পাচ্ছেন এবং এখন এটি বেশ সূক্ষ্মভাবে কাজ করে:

কার্সার হিসাবে ব্লকে ফিরে যেতে বিলম্ব ঠিক করুন

আমি আশা করি এটি অন্য কাউকে সাহায্য করতে পারে! 👻


1

আমি মনে করি না যে এটি অন্যান্য লোকদের ইতিমধ্যে জবাব প্রদানের জবাবগুলিতে বেশি যোগ করে তবে আমি এক জায়গায় জিনিসগুলিকে সংক্ষিপ্ত করতে এবং প্রাসঙ্গিক রেফারেন্সগুলির লিঙ্কও রাখতে চেয়েছিলাম।

আমার .vimrcচেহারা থেকে প্রাসঙ্গিক স্নিপেটটি এটির মতো:

    " Cursor appearance
    "
    " See also: [1]'ANSI Control Functions Summary', [2]DECSCUSR, [3]xterm+tmux
    "   entry in terminfo.src.
    " [1] https://www.vt100.net/docs/vt510-rm/chapter4.html
    " [2] https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
    " [3] https://raw.githubusercontent.com/mirror/ncurses/master/misc/terminfo.src
    "
    " On:
    " - entered insert mode
    let &t_SI = "^[[5 q^[]12;Magenta\007" " blinking bar (Ss) in magenta (Cs)
    " - entered replace mode
    let &t_SR = "^[[0 q^[]12;Red\007" " blinking block (Ss) in red (Cs)
    " - leaving insert/replace mode
    let &t_EI = "^[[2 q^[]112\007" " terminal power-on style (Se) and colour (Cr)

দ্রষ্টব্য: '^['অক্ষরগুলি আসলে একটি ESC(পালানোর ক্রম) নিয়ন্ত্রণের অক্ষর।


0

এটি xfce4- টার্মিনালে সঠিকভাবে কাজ করে:

আপনার নিম্নলিখিত স্ক্রিপ্ট যোগ করুন .vimrc

if has("autocmd")
  au InsertEnter * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_BLOCK/TERMINAL_CURSOR_SHAPE_IBEAM/' ~/.config/xfce4/terminal/terminalrc"                                                                                          
  au InsertLeave * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_IBEAM/TERMINAL_CURSOR_SHAPE_BLOCK/' ~/.config/xfce4/terminal/terminalrc"                                                                                          
  au VimLeave * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_IBEAM/TERMINAL_CURSOR_SHAPE_BLOCK/' ~/.config/xfce4/terminal/terminalrc"  
endif

সংক্ষিপ্ত: আপনি জানেন যে xfce4- টার্মিনাল .config/xfce4/terminal/terminalrcফাইলগুলিতে পছন্দগুলি রাখে । TERMINAL_CURSOR_SHAPE_BLOCKআপনি TERMINAL_CURSOR_SHAPE_IBEAMযখন সন্নিবেশ মোডে থাকবেন তখন স্ক্রিপ্টটি পরিবর্তিত হবে এবং আপনি যখন সন্নিবেশ মোড বা ভিআইএম ত্যাগ করবেন তখন ব্লকে ফিরে আসবেন। পরিবর্তন করুন মুক্ত মনে IBEAMকিছু করতে চান করার জন্য ( BLOCK, IBEAMএবং UNDERLINEউপলব্ধ)।


0

যদি আপনি একটি আধুনিক সংস্করণ ব্যবহার করে থাকেন nvimএবং আপনি এটি অর্জন করতে চেয়েছিলেন তবে উপরে উল্লিখিত এই অভিনব কাজের কিছু এড়াতে পারবেন।

নীচের সেটিংসটি সাধারণ মোডে ব্লক কার্সার থেকে সন্নিবেশে লাইন কার্সারের পরিবর্তে কার্সারটিকে আন্ডারলাইন করতে স্যুইচ করবে।

# ~/.tmux.conf
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q',w

" ~/.vimrc
" Sets cursor styles
" Block in normal, line in insert, underline in replace
set guicursor=n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20

এই দুটি উত্স থেকে টানা নিম্নলিখিত সেটিংসের সাহায্যে আমি এই কাজটি পরিচালনা করতে সক্ষম হয়েছি।

টুই-কার্সার-আকৃতি

গিক্সার


-2

আমার কাছে অন্যান্য জিনিসের মধ্যে সাধারণত স্ট্যাটাসলাইনে বর্তমান ভিএম মোড থাকে। আপনি যদি সরলতার সন্ধান করেন তবে আপনি কেবল এই তথ্যটি স্ট্যাটাসলাইনে সেট করতে পারেন ।

তবে সাধারণত আপনার ক্যাপস লকটি হতাশ হয়ে পড়ে থাকে এবং কমান্ড মোডে থাকে তখন সত্যিই ক্রেজি জিনিসগুলি ঘটে থাকে (যেহেতু এইচজেকিএল এখন এইচজেকেএল - কেবল জে এবং কেই কি ঘটছে বুঝতে না পারলে আপনাকে চুল টেনে তুলতে যথেষ্ট। :h Jএবং :h Kআমি কী বলতে চাইছি তা দেখতে)। কেবল ক্যাপস লক কীটি সাবধান করুন এবং আপনি বেশিরভাগ সময় আইএমওতে ভাল থাকবেন।


46
কিভাবে এই প্রশ্নের উত্তর দেয়?
ডেভিড নদী

4
@ ডেভিডাইভারস এটি এক্সওয়াই সমস্যার একটি অ্যাপ্লিকেশন যেখানে ওপি তার সমস্যার সমাধানের জন্য জিজ্ঞাসা করছিল (ভিআইএম নরমাল মোডে থাকার বিষয়ে জানে না এবং এটি চিহ্নিত করতে কার্সারটি পরিবর্তন করতে চায়) তবে বিকল্পের সাথে সন্তুষ্ট হয়ে যায় (এবং আইএমও নয় একটি দুর্দান্ত) সমাধান (রাষ্ট্রের সাথে তার স্ট্যাটাসলাইন বাড়ানো)
স্টিভেন লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.