কীভাবে ভিআইএম এর সাথে ইন্টারেক্টিভভাবে অনুসন্ধান / গ্রেপ করবেন?


12

একটি সম্পূর্ণ প্রকল্পের জন্য প্রতিটি ফাইলের মধ্যে ইন্টারেক্টিভভাবে অনুসন্ধানের জন্য ভিআইএম কনফিগার করার কোনও উপায় আছে কি?

ইন্টারেক্টিভ দ্বারা , আমি প্রতিটি কীস্ট্রোক আপডেট করা মানে।

ইমাসের পরামর্শ-গিট-গ্রেপের মতো কিছু , দেখুন: উদাহরণস্বরূপ ডেমো


আমি ব্যক্তিগতভাবে এটি ব্যবহার করি না তাই আমি 100% নিশ্চিত নই তবে আমি মনে করি ctrl-pবা এর মতো একটি প্লাগইন যা আপনি সন্ধান করছেন। দ্রষ্টব্য যে unite.vimএটি করতে সক্ষম হওয়া উচিত তবে আমি এটির সুপারিশ করব না কারণ আমার মতে এটি একটি ভারী এবং বাগ তৈরির প্লাগইন।
স্ট্যাটক্স

নেই ctrl-pএকটি উপায় ইন্টারেক্টিভ ফাইলের বিষয়বস্তু অনুসন্ধান করতে হবে? আমি কেবল কখনও এটির নামের ভিত্তিতে ফাইলগুলি ইন্টারেক্টিভ অনুসন্ধান করতে ব্যবহার করেছি।
ধারণাগুলি 42

আমার মনে হয় এটা সম্ভব কিন্তু আমি আগেই বলেছি আমি এটি ব্যবহার করবেন না তাই হয়তো আমি ভুল
statox

উত্তর:


14

আমি নিশ্চিত না যে আপনি এটি যা খুঁজছেন, তবে সম্ভবত আপনি fzf এবং fzf.vim চেষ্টা করতে পারেন ।

আপনি যদি প্লাগইন ম্যানেজার হিসাবে ভিএম-প্লাগ ব্যবহার করেন তবে এগুলি ইনস্টল করার জন্য আপনাকে যা করতে হবে তা হ'ল আপনার এই লাইনগুলি যুক্ত করা vimrc:

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

... রেখার মাঝে কোথাও:

call plug#begin('~/.vim/plugged')

এবং:

call plug#end()

তারপরে মৃত্যুদণ্ড কার্যকর করুন :PlugInstall


সরবরাহিত বিভিন্ন কমান্ড এবং ম্যাপিংগুলির মধ্যে fzf.vim(যার একমাত্র উদ্দেশ্য ম্যাপিংস এবং কমান্ডগুলি fzfপূর্বনির্ধারিত উত্সগুলির মধ্যে ফাজি অনুসন্ধানের জন্য জিজ্ঞাসা করা ইনস্টল করা মনে হয় ) এর মধ্যে একটি কমান্ড রয়েছে :Ag

এটি ব্যবহার করতে সক্ষম হতে আপনাকে শেল কমান্ড এজি ইনস্টল করতে হবে । ডিবিয়ান ভিত্তিক বিতরণগুলিতে, নিম্নলিখিত কমান্ড দিয়ে এটি করা যেতে পারে:

apt-get install silversearcher-ag

গিথুবের প্রকল্পটি এটি MacOS এ কীভাবে ইনস্টল করবেন তা ব্যাখ্যা করে:

brew install the_silver_searcher

:Agচারপাশে একটি মোড়ক $ ag, এবং আপনাকে বর্তমান ডিরেক্টরি (আপনার টাইপ করার সময় প্রদর্শিত হবে :pwd) এর ফাইলগুলিতে অস্পষ্ট অনুসন্ধান করার অনুমতি দেয় । ম্যাচগুলি প্রতিটি কীস্ট্রোকের পরে আপডেট হয়।

আপনি পারেন:

  • চক্র ফরোয়ার্ড এবং অনগ্রসর সঙ্গে মিল মাধ্যমে C-nএবংC-p
  • বর্তমান ম্যাচ এবং পরবর্তী / পূর্ববর্তী এক পদক্ষেপ নির্বাচন Tab/S-Tab
  • নির্বাচন করুন অথবা সঙ্গে সব ম্যাচ অনির্বাচন M-aবাM-d

আপনি যদি এক বা একাধিক ম্যাচ বাছাই করেন, এন্টার চাপার পরে, তারা কুইকফিক্স তালিকাটি তৈরি করবে। সেখান থেকে আপনি তাদের মাধ্যমে ডিফল্ট ভিম কমান্ড / ম্যাপিংস, যেমন :cnextএবং এর মাধ্যমে নেভিগেট করতে সক্ষম হবেন :cprevious

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

আপনি যদি ইনস্টল করা সমস্ত কমান্ডে একটি উপসর্গ যুক্ত করতে চান fzf.vimএবং বিদ্যমান কমান্ডগুলিকে ওভাররাইড করা এড়াতে চান তবে আপনি এটিতে যুক্ত করতে পারেন vimrc:

let g:fzf_command_prefix = 'your_prefix'

আমি ব্যবহার Fzfএকটি উপসর্গ হিসাবে, এটা কেন আমি টাইপ হয়নি :Agকিন্তু :FzfAg


আপনি যদি এর git grepপরিবর্তে ব্যবহার করতে পছন্দ করেন agতবে মনে হয় আপনি এটির মতো আপনার নিজের কাস্টম র্যাপারটি ইনস্টল করতে পারেন :GGrep:

command! -bang -nargs=* GGrep
  \ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)

এটি ব্যাখ্যা করা হয়েছে :h fzf-vim-customization

এছাড়াও, যদি fzftmux একটি ফলকে খোলে, এবং আপনি এটি সম্পূর্ণ স্ক্রীনটি পরিবর্তে লাগে পছন্দ করেন, আপনি সমস্ত কমান্ড করার জন্য একটি ঠুং সংযুক্ত করতে পারবেন ( :Ag!, :GGrep!, ...)।


আপনি যেমনটি আপনার শেষ মন্তব্যে বলেছিলেন , ডিফল্টরূপে fzfআপনার শেলের কনফিগারেশন পরিবর্তন করে। উদাহরণস্বরূপ, আপনি যদি bashএটি ব্যবহার করেন তবে এটি আপনার নীচের লাইনটি যুক্ত করবে ~/.bashrc:

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

এটি ফাইলটি উত্স করবে ~/.fzf.bash। পরবর্তীটিতে কিছু কোড রয়েছে:

# Setup fzf
# ---------
if [[ ! "$PATH" == */home/user/.fzf/bin* ]]; then
  export PATH="$PATH:/home/user/.fzf/bin"
fi

# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/home/user/.fzf/shell/completion.bash" 2> /dev/null

# Key bindings
# ------------
source "/home/user/.fzf/shell/key-bindings.bash"

এই কোড এনভায়রনমেন্ট ভেরিয়েবল অবশ্যই এমন একটি পথ appends $PATH: /home/user/.fzf/bin; যা fzfপ্রোগ্রামযুক্ত ফোল্ডারটি ।

এটি অন্যান্য 2 টি ফাইলও উত্স করে:

/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash

প্রথমটি সম্পূর্ণরূপে ফাংশনগুলি সংজ্ঞায়িত করে বলে মনে হয়, দ্বিতীয়টি কী বাইন্ডিংগুলি ইনস্টল করে।

দুর্ভাগ্যক্রমে, মূল বাইন্ডিংগুলি ডিফল্ট readlineফাংশনগুলিকে ওভাররাইড করতে পারে ।
উদাহরণস্বরূপ, fzfফাংশন binds fzf-file-widgetকরতে C-t। এই কীটি সাধারণত transpose-charsফাংশনটি সম্পাদন করতে রিডলাইন দ্বারা ব্যবহৃত হয় ।

আপনি যদি এটি না চান তবে এর একটি সম্ভাব্য সমাধান হ'ল আপনার কনফিগারেশনটি স্রোতের ~/.bashrcপরে কী-র বাইন্ডিংগুলি পুনরুদ্ধার fzfকরা হবে। উদাহরণস্বরূপ, যদি আপনি C-tএটির পুরানো আচরণটি রাখতে চান , এটি কার্সারের চারপাশে 2 টি অক্ষর স্থানান্তর করছে এবং fzf-file-widgetঅন্য একটি কীতে আবদ্ধ হয়, তবে আসুন আমরা বলি যে C-x C-tআপনি এই লাইনগুলি শেষে যুক্ত করতে পারেন ~/.bashrc:

bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'

একই জিনিসটি zshশেলের ক্ষেত্রে প্রযোজ্য , তবে কী বাঁধাই ইনস্টল করার সিনট্যাক্সটি কিছুটা আলাদা:

bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars

আপনার ব্যবহৃত শেল কী বাইন্ডিংগুলির মধ্যে যদি কোনওটি ওভাররাইড হয়ে যায় তবে fzfআপনি এটি পুনরুদ্ধার করতে চান তবে জানেন না যে ফাংশনটি কার্যকর হয়েছিল তার সঠিক নাম কী, আপনি নিম্নলিখিত জিনিসটি চেষ্টা করতে পারেন।

প্রথমে আপনার অভ্যন্তরে ~/.bashrc, অস্থায়ীভাবে লাইনটি মন্তব্য করুন যা fzfকনফিগারেশনটির উত্স sources তারপরে, টার্মিনালটি আবার খুলুন এবং bind -Pকমান্ডের আউটপুটটি দেখুন , যা আপনি একটি ভিম বাফারে পড়তে পারেন:

bind -P | vim -R -

আমি নিশ্চিত নই, তবে আমি মনে করি এটির বেশিরভাগ বা সমস্ত readlineকী বাইন্ডিংগুলি প্রদর্শন করা উচিত । যদি আপনি C-tকী- তে আবদ্ধ পঠন ফাংশনের নামটি সন্ধান করেন, ভিম বাফারে, আপনি অনুসন্ধান করতে পারেন \\C-t। এবং যদি আপনি আবদ্ধ M-c(মেটা / ইএলটি কী) সন্ধান করে থাকেন তবে আপনি অনুসন্ধান করতে পারবেন \\ec( \eপলায়ন কীটির জন্য দাঁড়িয়েছে এবং এটি M-cএকই কীকোড তৈরি করে বলে মনে হচ্ছে escape + c)।

কমান্ডের zshআউটপুট দেখে আপনি একই জিনিস করতে পারেন bindkey। তবে ^[এবার, মেটা / ওয়েল মডিফায়ার কীটি বোঝানো হয়েছে, অন্যদিকে একটি একক ক্যারেট ( ^) অক্ষরটি নিয়ন্ত্রণ কী হিসাবে দাঁড়িয়েছে।


বর্তমানে, আমি 4 টি কী বাইন্ডিংগুলি পেয়েছি fzfযা তাদের নামে কীওয়ার্ড যুক্ত ফাংশন সম্পাদন করে । তারা কী সিকোয়েন্স ব্যবহার C-i(হিসাবে একই Tab), C-r, C-tএবং M-c। তারা নিম্নলিখিত ফাংশনে আবদ্ধ:

C-i    fzf-completion
C-r    fzf-history-widget
C-t    fzf-file-widget
M-c    fzf-cd-widget

আমার সিস্টেমে, মূলত readline( bashকমান্ড লাইনটি সম্পাদনের জন্য ব্যবহৃত গ্রন্থাগার ) এই কীগুলি এই ফাংশনগুলিতে আবদ্ধ করে:

C-i     complete
C-r     reverse-search-history
C-t     transpose-chars
M-c     capitalize-word

এবং zle(এটির দ্বারা ব্যবহৃত লাইন সম্পাদক zsh) এগুলিতে আবদ্ধ:

C-i     expand-or-complete
C-r     history-incremental-search-backward
C-t     transpose-chars
M-c     capitalize-word

1
কি agআলাদা প্লাগইন / সরঞ্জাম যা চাহিদা ইনস্টল করার জন্য?
ধারণাগুলি 42

@ ধারণাগুলি 42 হ্যাঁ, এর জন্য দুঃখিত, আমি ভুলে গিয়েছিলাম যে শেল কমান্ডটিও agপ্রয়োজনীয় ছিল। আমি উত্তর আপডেট।
ব্যবহারকারী 9433424

1
ডিফল্টরূপে আপনার ব্যাশ এবং zsh কনফিগারেশনগুলি প্রতিস্থাপন করে এই সরঞ্জামগুলি সম্ভবত লক্ষণীয়।
ধারণাগুলি 42

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