Как мне лучше пролистать сгибы в Vim? - PullRequest
4 голосов
/ 11 августа 2011

У меня обычно есть foldclose = all, поэтому при прокрутке кода складки автоматически открываются и закрываются. но иногда мне также нравится быстро пролистывать текст, используя и . Проблема в том, что это часто выпрыгивает из сгиба, который я сейчас просматриваю, и закрывает его, прежде чем у меня появляется шанс увидеть последний бит. То, что мне нужно, это способ пролистать текст, и если я нахожусь в открытом сгибе, остановитесь в конце сгиба, если бы следующая страница вывела меня из него. И если позиция курсора уже находится на последней строке сгиба, следующее действие подкачки фактически продвинет страницу. Я предполагаю, что для этого требуется функция vimscript, поэтому просто хочу посмотреть, делал ли кто-нибудь что-то подобное.

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Вы можете начать с этого:

function! FoldawareCD()
  let there = line('.') + &scroll
  let nextl = line('.') + 1 
  if foldlevel('.') > 0 && foldclosed('.') == -1 && (foldclosed(there) != -1 || foldlevel(there) == 0) && (foldclosed(nextl) == -1 && foldlevel(nextl) > 0)
        call feedkeys("]z")
  else      
        call feedkeys("^D")
  endif     
endfunction


noremap <F1> :call FoldawareCD()<CR>

If exaplanation

  • foldlevel('.') > 0 && foldclosed('.') == -1

    true, когда мы открытыFold

  • (foldclosed(there) != -1 || foldlevel(there) == 0)

    true, когда ^ D приземлится на закрытый фолд или без фолда

  • (foldclosed(nextl) == -1 && foldlevel(nextl) > 0)

    истина, когда следующая линия находится в нашем сгибе (поэтому мы не на последней строке нашего открытого сгиба)

0 голосов
/ 11 августа 2011

Вы можете попробовать следующее отображение

nnoremap <C-D> Lz.
nnoremap <C-U> Hz.

, которое перемещает курсор на первую / последнюю видимую строку и прокрутку, чтобы она стала средней линией.

0 голосов
/ 11 августа 2011

Попробуйте добавить это в ваш файл .vimrc.Я не уверен, что это именно то, что вы просите, но это лучшее, что я нашел.

set foldmethod=syntax   "fold based on indent
set foldnestmax=10      "deepest fold is 10 levels
set nofoldenable        "dont fold by default
set foldlevel=1         "this is just what i use
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...