পাইথন কোডের জন্য ভিম ফোল্ডিং ব্যবহার করার প্রস্তাবিত উপায় কী


112

আমি পাইথন কোডের জন্য ভিমে কোড ফোল্ডিং সক্ষম করতে আগ্রহী। আমি এটি করার একাধিক উপায় লক্ষ্য করেছি।

ভিমে পাইথন কোড ভাঁজ করার জন্য কারও কি পছন্দসই উপায় আছে? অর্থাত,

  • আপনি কি ব্যবহার করেন এবং পছন্দ করেন এমন কোনও ভিআইএম প্লাগইন রয়েছে?
  • আপনি কি ম্যানুয়াল ভাঁজ ব্যবহার করেন বা মন্তব্যগুলিতে চিহ্নিতকারী রাখেন?
  • ভিমে পাইথনের কোড ফোল্ডিং করার জন্য অন্য কোনও প্রস্তাবিত উপায়?

উত্তর:


117

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

set foldmethod=indent
nnoremap <space> za
vnoremap <space> zf

81
: সেট ফোল্ডমেডথ = ইন্ডেন্ট প্রথমে। আমি ঠিক এই জন্য googling ছিল এবং আপনার উত্তরে হোঁচট খাচ্ছি, খুব সুন্দর! :)
tmadsen

47
আমার বন্ধুটিও পছন্দ করেছে set foldnestmax=2, এইভাবে ক্লাসের পদ্ধতিগুলি ভাঁজ করা হয়, তবে অভ্যন্তরীণ বিবৃতিগুলি হয় না।
ডেনিলসন সা মায়া

9
আমি নিশ্চিত নই যে জেডএফ-এর এই উত্তরটিতে দ্বিতীয় ম্যাপিং কেন। ইনডেন্ট-ভাঁজ ব্যবহার করা হচ্ছে এটি ব্যবহৃত হয় না। তবে, আপনি যদি ম্যানুয়াল ভাঁজ করছেন ম্যাপিং সঠিক ধারণা দেয় makes za, তবে, দ্রুত ভাঁজগুলি খুলতে / বন্ধ করার সেরা উপায় বলে মনে হয়। আমি ভাঁজ নেভিগেশন (zk, zj) ব্যবহার করারও পরামর্শ দিই।
ডেরেক লিটজ

ম্যানুয়াল ম্যাপিংয়ের জন্য vnoremap ভাল। আপনার এফটিপ্লাগিনে পাইথনের জন্য সেট ফোল্ডমেডথ = ইনডেন্ট যুক্ত করুন। তারপরে, আপনার .vimrc এ, ফোল্ডমেডথ = ম্যানুয়াল সেট করুন। এখন, আপনি স্পেসবার ম্যাপিংয়ের সাহায্যে পাইথন এবং অ পাইথন উভয় ভাঁজ করতে পারেন
লিওনেল

26

আমি পাইথনের জন্য এই সিনট্যাক্স ফাইলটি ব্যবহার করি । এটি ভাঁজ পদ্ধতিটি সিনট্যাক্সে সেট করে এবং সমস্ত শ্রেণি এবং ফাংশনগুলি ভাঁজ করে, তবে অন্য কিছু না।


উদ্ঘাটন পরে ভাঁজ কিভাবে? আমি শর্টকাট খুঁজে পাচ্ছি না! tnx
মোজ

এই সিনট্যাক্স ফাইলটি ব্যবহার করে দেখুন এবং এটি হাইলাইট করার জন্য যুক্তিসঙ্গতভাবে ভাল কাজ করেছে। তবে এটি ঠান্ডা ভাঁজ করার জন্য একেবারেই কিছুই করেনি, যখন আমি 'জেডএম' ব্যবহার করি তখন কিছুই হয় না, যখন আমি ক্লাসে 'জেএ' ব্যবহার করি তখন আমি E490 পেয়েছি (কোনও ভাঁজ পাওয়া যায় না)। কি ভুল হচ্ছে?
দানি গেহডটিচনিক্সান

+1 টি। প্রথমে চেষ্টা করুন, পাইথন কোড (বর্গ, পদ্ধতি) ভাঁজ আমার জন্য আশ্চর্যজনকভাবে কাজ করে। কর্মচারী ওয়াল্টারের ( স্ট্যাকওভারফ্লো.com / a / 360634 / 605356 ) কমান্ডগুলি ভাঁজ করার জন্য স্পেস বারে মানচিত্রের উত্তর দেয়, তবে সেই সমাধানটি এর মতো প্রায় (আমার জন্য) কাজ করে না। রেফারেন্সের জন্য @ টমাসকে ধন্যবাদ।
জনি উটাহ

@ দানিগিহটডিচনিক্সান, সম্ভবত আপনার প্রয়োজন: অ্যানিসিএস - এটি দেখুন এবং আমি মনে করি আপনি একটি সমাধান
পেয়ে যাবেন

10

পাইথন কোড ভাঁজ করার জন্য অন্য একটি প্লাগইন। বরং সরল, হ্যান্ডলিং ডকাস্ট্রিংস এবং গিটহাবে:

SimpylFold

উপভোগ করুন!


এটি সবচেয়ে ভাল কাজ করে। কোড ফোল্ডিংয়ের বিষয়ে আমি ভাবনা একেবারেই বন্ধ করে দিয়েছি কারণ এটি কখনই কোনও মাথা ব্যথার কারণ হয় নি।
iankit

@iankit আমি কখনও কখনও ইচ্ছুক এটি ভাঁজ হবে if, forএবং whileব্লক, না?
iago-lito '15

এইচএমএম যা আমি মনে করি খুব বেশি সহায়ক হতে পারে না। তিনি যদি এই ব্লকগুলি ভাঁজ করেন তবে ভাঁজ অবস্থায় থাকা অবস্থায় সামগ্রীটি কী তা খুব স্পষ্ট নয়। তবে পদ্ধতিগুলি এবং অন্যান্য নামযুক্ত ব্লকগুলির সাথে নামটি সব বলে। ভাঁজ করা ব্লকটি এর নামটি দেখে কী করছে তা আমি क्रमवारी করতে পারি।
iankit

@ ইয়ানকিট আমি জানি না .. আমি চেষ্টা করতে চাই। চেষ্টা করছেন না কেন ? ^ ^
iago-lito '15

7

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

#Toggle fold methods \fo
let g:FoldMethod = 0
map <leader>fo :call ToggleFold()<cr>
fun! ToggleFold()
    if g:FoldMethod == 0
        exe 'set foldmethod=indent'
        let g:FoldMethod = 1
    else
        exe 'set foldmethod=marker'
        let g:FoldMethod = 0
    endif
endfun
#Add markers (trigger on class Foo line)
nnoremap ,f2 ^wywO#<c-r>0 {{{2<esc>
nnoremap ,f3 ^wywO#<c-r>0 {{{3<esc> 
nnoremap ,f4 ^wywO#<c-r>0 {{{4<esc>
nnoremap ,f1 ^wywO#<c-r>0 {{{1<esc>

5

আমি মনে করি ইনডেন্ট ভাঁজ অজগর জন্য ভাল। আমি ভিআইএম-কনফিগার পাইথন / জাঙ্গো আইডিই ধারণাগুলির জন্য একটি বহু-ব্রাঞ্চযুক্ত গিট রেপো তৈরি করছি। কাঁটাচামচ!

http://github.com/skyl/vim-config-python-ide


5

আমি সত্যিই python_ifoldপ্লাগইন পছন্দ করি ।


1
দুর্ভাগ্যক্রমে, এই প্লাগইনটি আমার ভিএমকে দ্রুত রাখার জন্য আমি পছন্দ করার চেয়ে বেশি প্রসেসরের সময় ব্যবহার করে (এমনকি একটি সংস্করণ সহ)। অন্য কোন পরামর্শ?
পল ডি ইডেন

11
এই উত্তরের একটি বিবরণ প্রয়োজন।
ষাট ফুটারসুডে


3

আমার জন্য আদর্শ ভাঁজ হ'ল কেবল classএবং defব্লকগুলি ভাঁজ করা, ইনডেন্ট ভাঁজ আমার স্বাদের জন্য খুব বেশি। আমি মনে করি একটি মার্জিত সমাধান টমাস দ্বারা উল্লিখিত একটি মত সিনট্যাক্স সিস্টেম ব্যবহার করা হয় । তবে এটির অর্থ মূল সিনট্যাক্স ফাইলটি প্রতিস্থাপন করা এবং এটি মূলটির চেয়ে পুরানো হতে পারে (অর্থাত্ স্ক্রিপ্টটি পাইথন 3 সিনট্যাক্সের উল্লেখ করে না)।

আমার সমাধানটি হ'ল ~/.vim/syntaxফোল্ডারে python.vimকেবলমাত্র গুরুত্বপূর্ণ লাইনগুলির সাথে একটি ফাইল স্থাপন করা (উপরের স্ক্রিপ্ট থেকে নেওয়া):

syn match   pythonDefStatement  /^\s*\%(def\|class\)/
       \ nextgroup=pythonFunction skipwhite
syn region  pythonFunctionFold  start="^\z(\s*\)\%(def\|class\)\>"
       \ end="\ze\%(\s*\n\)\+\%(\z1\s\)\@!." fold transparent

hi link pythonDefStatement Statement

তারপরে সহজেই ভাঁজটি সক্রিয় করুন :set foldmethod=syntax


1
আমি এই সমাধানটি পছন্দ করি। তবে তারা যদি কোনও লাইনের শুরুতে দাঁড়ায় তবে এটি ' গুলি classএবং এসগুলির সাথে মেলে না def। যেহেতু আমি খুব কমই এই এক্সপ্রেশনটি পড়তে পারি, তাই ম্যাচ করার জন্য ^defএবং এটি টুইট করার চেষ্টা করতে আমি সমস্যায় পড়েছি ^class। এটি কৌতূহলজনক, যেহেতু এটির \s*সাথে ভাল আচরণ করা উচিত ..
iago-lito '26

2

পাইথন উত্সটি একটি কাস্টম ভিএমআরসি ফাইলের সাথে একটি ভিম সিনট্যাক্স প্লাগইন নিয়ে আসে। ভিমে পাইথন এফএকিউ পরীক্ষা করে দেখুন


2
এই বাক্য গঠন ফাইলটিতে কোনও ভাঁজ তথ্য নেই। সুতরাং আপনি সিনট্যাক্স ভাঁজ সহ এই সিনট্যাক্স ফাইলটি ব্যবহার করতে পারবেন না।
কেএফএল

2

আপনার .vimrc:

set foldmethod=indent
set shiftwidth=4

তারপরে zMসমস্তটি zRপ্রসারিত করার জন্য সমস্তকে মাস্ক করুন । আমি আরও যোগ করেছি:

nnoremap <space> za
vnoremap <space> zf
map z1  :set foldlevel=0<CR><Esc>
map z2  :set foldlevel=1<CR><Esc>
map z3  :set foldlevel=2<CR><Esc>
map z4  :set foldlevel=3<CR><Esc>
map z5  :set foldlevel=4<CR><Esc>
map z6  :set foldlevel=5<CR><Esc>
map z7  :set foldlevel=6<CR><Esc>
map z8  :set foldlevel=7<CR><Esc>
map z9  :set foldlevel=8<CR><Esc>

সুতরাং আপনি করতে পারেন z1এবং z2অল্প করে অবিচ্ছিন্ন।


2

আমি .vimrc এর জন্য লিখেছিলাম এই ছোট্ট ভিএম স্ক্রিপ্টটি সত্যই পছন্দ করি। এটি alt+1প্রথম পাইথন ইনডেন্ট স্তর (শ্রেণীর সংজ্ঞা এবং ফাংশন) alt+2ভাঁজ করা, দ্বিতীয় স্তরের (শ্রেণি পদ্ধতি) ভাঁজ করা এবং সমস্ত কিছু উন্মোচন করার জন্য মানচিত্র তৈরি করে alt+0। এটি নিশ্চিত করে যে এটি কেবল একটি স্তরকে ভাঁজ করে এবং নেস্টেড উপস্তরের কোনওটিকেও ভাঁজ করে না। আপনি এখনও zaবর্তমান ব্লকের জন্য টগল ফোল্ডিং করতে ব্যবহার করতে পারেন । নোট যে ^[0, ^[হয় altআমার টার্মিনাল জন্য। ভিআইএম স্ক্রিপ্টে প্রচুর অভিজ্ঞতা নেই তাই ফাংশনে পরামর্শ দেওয়ার জন্য নির্দ্বিধায় :)

" Python folding
nnoremap ^[0 zR<CR>
nnoremap ^[1 :call Fold(0)<CR>
nnoremap ^[2 :call Fold(1)<CR>
function Fold(level)
    :let b:max = a:level + 1
    :set foldmethod=indent
    :execute 'set foldnestmax='.b:max
    :execute 'set foldlevel='.a:level
endfunction

1
একটি ম্যাকের Alt কী ব্যবহার করতে: stackoverflow.com/questions/7501092/can-i-map-alt-key-in-vim
মাইক ব্যানিস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.