ভিম জন্য স্ক্রল বার (curses- ভিত্তিক এক, gvim না)?


9

লিনাক্স ব্যবহারকারী হিসাবে, আমি সিএলআই এবং টিআইআইআই সরঞ্জামগুলির সাথে বেশ আরামদায়ক ছিলাম, কিন্তু আমি প্রায় প্রতিটি GUI প্রোগ্রামে উপস্থিত ছোট স্ক্রলবারটি মিস করি। "9752 লাইন, 24%" এর পরিবর্তে স্ক্রলবার থেকে আমি কতক্ষণ ধরে থাকি এবং কোথায় থাকব তা সম্পর্কে সর্বদা আমার কাছে সহজ হয়েছে।

আমি কি আশা করি মত একটি ASCII স্ক্রলবার হয়

|
|
|
|
#
#
#
|
|
|

এবং আমি বাম বা ডানে উপস্থিত হতে কনফিগার করতে পারি (এবং বাম দিকে, লাইন নম্বর এবং ভাঁজ চিহ্নের আপেক্ষিক অবস্থান)। এটি করার জন্য ইতিমধ্যে একটি ভিম প্লাগইন আছে, অথবা কিভাবে আমি নিজের একটি লিখতে পারি? ভিম এর প্লাগইন ফ্রেমওয়ার্ক যেমন UI পরিবর্তনগুলি সরাসরি সমর্থন করে বলে মনে হচ্ছে না।

উত্তর:


3

আপনি যদি "আপনার নিজস্ব প্লাগইন লিখুন" রুট বিবেচনা করা হয়, ভিম এর 'সাইন' বৈশিষ্ট্য শুরু করার জন্য একটি ভাল জায়গা হতে পারে। এই বৈশিষ্ট্যটি যেমন উদাহরণস্বরূপ, সিনট্যাক্স পরীক্ষণ প্লাগইনগুলি হাইলাইট ত্রুটিগুলি।

vim sign example

সাইন স্থাপন করার জন্য একটি সহজ পদ্ধতি তারপর হবে:

  1. শতাংশ হিসাবে আপনি ফাইল যেখানে আপনি নির্ধারণ করুন p
  2. ভিম উইন্ডোসে কত লাইন দৃশ্যমান তা নির্ধারণ করুন L
  3. কাছাকাছি লাইন নম্বর এ একটি সাইন রাখুন int(p*L)
  4. ফাইলের চারপাশে আন্দোলন পুনর্নির্মিত

ধন্যবাদ! এটি আমার নির্দিষ্ট প্রয়োজনীয়তার খুব কাছাকাছি, যদিও ডক থেকে এটি মনে হয় যে লক্ষণগুলি কেবল বাম পাশে টেনে নেওয়া যেতে পারে। ভাল উত্তর যদিও, গৃহীত!
xiaq

10

স্ক্রলবার হিসাবে স্ট্যাটাস লাইনটি ব্যবহার করা সম্ভব। আমি আমার .vimrc নিম্নলিখিত আছে, যা একটি স্ক্রলবার emulates (এটি শুধুমাত্র অনুভূমিকভাবে, কিন্তু এটি চমকপ্রদভাবে ভাল কাজ করে)। এই মূলত আলোচনা করা হয়েছিল vim_use মেইলিংলিস্ট কিছু বছর আগে.

func! STL()
  let stl = '%f [%{(&fenc==""?&enc:&fenc).((exists("+bomb") && &bomb)?",B":"")}%M%R%H%W] %y [%l/%L,%v] [%p%%]'
  let barWidth = &columns - 65 " <-- wild guess
  let barWidth = barWidth < 3 ? 3 : barWidth

  if line('$') > 1
    let progress = (line('.')-1) * (barWidth-1) / (line('$')-1)
  else
    let progress = barWidth/2
  endif

  " line + vcol + %
  let pad = strlen(line('$'))-strlen(line('.')) + 3 - strlen(virtcol('.')) + 3 - strlen(line('.')*100/line('$'))
  let bar = repeat(' ',pad).' [%1*%'.barWidth.'.'.barWidth.'('
        \.repeat('-',progress )
        \.'%2*0%1*'
        \.repeat('-',barWidth - progress - 1).'%0*%)%<]'

  return stl.bar
endfun

hi def link User1 DiffAdd
hi def link User2 DiffDelete
set stl=%!STL()

আপনি আছে নিশ্চিত করুন laststatus অপশন সেট 2।


আমি সত্যিই এই সমাধানটি পছন্দ করি কারণ এটি স্ক্রোলবারকে এমন জায়গায় রাখে যেখানে এটি কোডিং উইন্ডো থেকে কোনও স্থান না নেয়। ধন্যবাদ, খ্রিস্টান!
dotancohen

আমি ধারণা পছন্দ করি, এবং সম্ভবত একটি অনুভূমিক ছদ্ম-স্ক্রলবারের সাথেও থাকতে পারি। কিন্তু @redacted আমার বিবৃত প্রয়োজন কাছাকাছি একটি সমাধান উপস্থাপন। যদিও আপনার উত্তর +1 আছে। ধন্যবাদ!
xiaq

কিভাবে আপনি স্ক্রোল অবস্থান চিহ্নিতকারী এর বিজি রঙ সেট করবেন? Kde এ সৌরজগত থিম ব্যবহার করে এটি বাকি বার থেকে প্রায় অস্পষ্ট।
Mike

শেষ লাইন থেকে অনুমান করুন, হাইলাইটিং গ্রুপ ব্যবহারকারী 1 এবং ব্যবহারকারী 2 ব্যবহার করা হয়। আপনি তাদের পুনরায় সংজ্ঞা করতে পারেন।
Christian Brabandt

6

আমার আগের ভুল ফাঁক মুক্তির জন্য আমার প্রচেষ্টা ....

আমি ধারণাটি পছন্দ করি, তাই আজ ভিআইএম-এর লক্ষণ বৈশিষ্ট্য ব্যবহার করে স্ক্রলবার 'থাম্ব' দেখানোর জন্য আমি একটি প্লাগইন লিখেছি।

এটি এখনও অনেক বিটা, তবে এটি এখনই ব্যবহারযোগ্য, আমি এখনও এটিতে কাজ করতে চাই, এতে সমস্ত ডক্স এবং মন্তব্য এবং উপাদানগুলি টাইপ করা।

আমি এখানে উৎস পোস্ট করব, কিন্তু আপনি আমার থেকে এটি টানতে স্বাগত জানাই এইচজি রেপো । (অন্যান্য স্টাফ উপর খুব কঠিন হাসি না)

মনে রাখবেন ... অনেকটা বিটা, আমি আগে কখনো প্লাগইন লিখেছি না, বছরের পর বছর ধরে ভিমল-এ ড্যাব্লিং করেছি। (ধারণার প্রোটোটাইপ থেকে 1২ ঘন্টার কম সময় কম!)!

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


ছবি দরকারী:

Vim-Scrollbar in action


ভিআইএম Curses স্ক্রলবার - v0.1 - এল নিক্স - lornix@lornix.com এইচজি রেপো

" Vim global plugin to display a curses scrollbar
" Version:      0.1.1
" Last Change:  2012 Jul 06
" Author:       Loni Nix <lornix@lornix.com>
"
" License:      TODO: Have to put something here
"
"
if exists('g:loaded_scrollbar')
    finish
endif
let g:loaded_scrollbar=1
"
" save cpoptions
let s:save_cpoptions=&cpoptions
set cpoptions&vim
"
" some global constants
if !exists('g:scrollbar_thumb')
    let g:scrollbar_thumb='#'
endif
if !exists('g:scrollbar_clear')
    let g:scrollbar_clear='|'
endif
"
"our highlighting scheme
highlight Scrollbar_Clear ctermfg=green ctermbg=black guifg=green guibg=black cterm=none
highlight Scrollbar_Thumb ctermfg=red   ctermbg=black guifg=red   guibg=black cterm=reverse
"
"the signs we're goint to use
exec "sign define sbclear text=".g:scrollbar_clear." texthl=Scrollbar_Clear"
exec "sign define sbthumb text=".g:scrollbar_thumb." texthl=Scrollbar_Thumb"
"
" set up a default mapping to toggle the scrollbar
" but only if user hasn't already done it
if !hasmapto('ToggleScrollbar')
    map <silent> <unique> <leader>sb :call <sid>ToggleScrollbar()<cr>
endif
"
" start out activated or not?
if !exists('s:scrollbar_active')
    let s:scrollbar_active=1
endif
"
function! <sid>ToggleScrollbar()
    if s:scrollbar_active
        let s:scrollbar_active=0
        " clear out the autocmds
        augroup Scrollbar_augroup
            autocmd!
        augroup END
        "call <sid>ZeroSignList()
    else
        let s:scrollbar_active=1
        call <sid>SetupScrollbar()
    endif
endfunction

function! <sid>SetupScrollbar()
    augroup Scrollbar_augroup
        autocmd BufEnter     * :call <sid>showScrollbar()
        autocmd BufWinEnter  * :call <sid>showScrollbar()
        autocmd CursorHold   * :call <sid>showScrollbar()
        autocmd CursorHoldI  * :call <sid>showScrollbar()
        autocmd CursorMoved  * :call <sid>showScrollbar()
        autocmd CursorMovedI * :call <sid>showScrollbar()
        autocmd FocusGained  * :call <sid>showScrollbar()
        autocmd VimResized   * :call <sid>showScrollbar()
    augroup END
    call <sid>showScrollbar()
endfunction
"
function! <sid>showScrollbar()
    " not active, go away
    if s:scrollbar_active==0
        return
    endif
    "
    let bnum=bufnr("%")
    let total_lines=line('$')
    let current_line=line('.')
    let win_height=winheight(0)
    let win_start=line('w0')+0 "curious, this was only one had to be forced
    let clear_top=float2nr((current_line * win_height) / total_lines) - 1
    if clear_top < 0
        let clear_top=0
    elseif clear_top > (win_height - 1)
        let clear_top=win_height - 1
    endif
    let thumb_height=float2nr((win_height * win_height) / total_lines)
    if thumb_height < 1
        let thumb_height=1
    elseif thumb_height > win_height
        let thumb_height=win_height
    endif
    let thumb_height=thumb_height + clear_top
    let linectr=1
    while linectr <= clear_top
        let dest_line=win_start+linectr-1
        exec ":sign place ".dest_line." line=".dest_line." name=sbclear buffer=".bnum
        let linectr=linectr+1
    endwhile
    while linectr <= thumb_height
        let dest_line=win_start+linectr-1
        exec ":sign place ".dest_line." line=".dest_line." name=sbthumb buffer=".bnum
        let linectr=linectr+1
    endwhile
    while linectr <= win_height
        let dest_line=win_start+linectr-1
        exec ":sign place ".dest_line." line=".dest_line." name=sbclear buffer=".bnum
        let linectr=linectr+1
    endwhile
endfunction
"
" fire it all up if we're 'active'
if s:scrollbar_active != 0
    call <sid>SetupScrollbar()
endif
"
" restore cpoptions
let &cpoptions=s:save_cpoptions
unlet s:save_cpoptions
"
" vim: set filetype=vim fileformat=unix expandtab softtabstop=4 shiftwidth=4 tabstop=8:

আপনি মানে guioptions এবং সাহায্য হিসাবে স্পষ্টভাবে বলেছেন, এই শুধুমাত্র ভিম এর গুই সংস্করণ জন্য কাজ করে।
Christian Brabandt

খুশী হলাম। আমি ডাইনামিক সাইন প্লাগইনটিতে অনুরূপ কিছু প্রয়োগ করেছি। BTW: নোট, লাইন লাইন উপর লক্ষণ আঁকা হয় না।
Christian Brabandt

ধন্যবাদ! আমি আগেই আমার ফোবার জন্য তৈরি করা উচিত, তারপরে আমি এতে আরো আগ্রহী হয়েছি ... তাই আমি এটি লিখেছিলাম। সর্বদা হিসাবে, প্রাথমিক কাজ সহজ হয় ... এটি সব spiffy এবং শান্ত খুঁজছেন হচ্ছে হতাশাজনক অংশ। (folds কোন লক্ষণ ... উল্লেখ)
lornix

ধন্যবাদ! কিন্তু @ অ্যাক্যাক্টড ডেটা থেকে বিচার করা আপনার চেয়ে আগে সাইন বৈশিষ্ট্যটি উত্থাপিত করেছে, তাই তার উত্তরটি গ্রহণ করার পক্ষে সম্ভবত আরও বেশি নম্র। আপনার উত্তর +1 করেছে।
xiaq

1
আপনার repo মুছে ফেলা হয়েছে। এটি যদি আপনি Github এর মতো কোথাও রাখতে পারেন এবং অন্যকে এতে অবদান রাখতে দেয় তবে এটি দুর্দান্ত হবে। আমি সত্যিই মহান দেখায় মনে হয়।
Mike

0

কোনও আদর্শ সমাধান নয় তবে আপনি কোনটিতে স্ট্যাটাস লাইনের মতো কোনও ফাইলে ফাইলটি খুঁজে পেতে পারেন

set statusline=%<%m\ %f\ %y\ %{&ff}\ \%=\ row:%l\ of\ %L\ col:%c%V\ %P

বা ব্যবহার করে set number প্রতিটি লাইন আগে একটি লাইন নম্বর আছে।

আপনি ভিম সোর্স (ncurses) সংশোধন না করা পর্যন্ত, আমি এই সম্ভব নয় মনে কিন্তু আমি ভুল হতে পারে।


ধন্যবাদ কিন্তু আমি ইতিমধ্যেই জানতাম ... আমি শুধু চোখের দিকে কিছু সহজ খুঁজছিলাম।
xiaq

এটি একটি দীর্ঘ শট ছিল।
Sardathrion

0

এখানে একটি সংস্করণ যা মাউস দিয়ে টেনে আনা যায়। এটি স্ক্রোলওয়িএল ব্যবহার করার সময়ই আপডেট হয় - যদি স্ক্রোলবার প্রয়োজন হয়, তবুও আপনার হাত মাউসটিতে থাকা উচিত।

sign define scrollbox texthl=Visual text=[]
fun! ScrollbarGrab()
    if getchar()=="\<leftrelease>" || v:mouse_col!=1
        return|en
    while getchar()!="\<leftrelease>"
        let pos=1+(v:mouse_lnum-line('w0'))*line('$')/winheight(0)
        call cursor(pos,1)
        sign unplace 789
        exe "sign place 789 line=".(pos*winheight(0)/line('$')+line('w0')).b:scrollexpr
    endwhile
endfun
fun! UpdateScrollbox()
    sign unplace 789
    exe "sign place 789 line=".(line('w0')*winheight(0)/line('$')+line('w0')).b:scrollexpr
endfun
fun! ToggleScrollbar()
    if exists('b:opt_scrollbar')
        unlet b:opt_scrollbar
        nun <buffer> <leftmouse>
        iun <buffer> <leftmouse>
        nun <buffer> <scrollwheelup>
        nun <buffer> <scrollwheeldown>
        iun <buffer> <scrollwheelup>
        iun <buffer> <scrollwheeldown>
        exe "sign unplace 789 file=" . expand("%:p")
        exe "sign unplace 788 file=" . expand("%:p")
    el
        let b:opt_scrollbar=1
        nno <silent> <buffer> <leftmouse> <leftmouse>:call ScrollbarGrab()<cr>
        ino <silent> <buffer> <leftmouse> <leftmouse><c-o>:call ScrollbarGrab()<cr>
        nno <buffer> <scrollwheelup> <scrollwheelup>:call UpdateScrollbox()<cr>
        nno <buffer> <scrollwheeldown> <scrollwheeldown>:call UpdateScrollbox()<cr>
        ino <buffer> <scrollwheelup> <scrollwheelup><c-o>:call UpdateScrollbox()<cr>
        ino <buffer> <scrollwheeldown> <scrollwheeldown><c-o>: call UpdateScrollbox()<cr>
        let b:scrollexpr=" name=scrollbox file=".expand("%:p")
        exe "sign place 789 line=".(line('w0')*winheight(0)/line('$')+line('w0')).b:scrollexpr
        exe "sign place 788 line=1".b:scrollexpr
    en
endfun
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.