Лучшее из двух миров: клавиши со стрелками для перемещения курсора или пролистывания буферов - PullRequest
3 голосов
/ 03 июня 2010

Мне очень нравится этот трюк vim, использующий стрелки влево и вправо для переключения между буферами:

"left/right arrows to switch buffers in normal mode
map <right> :bn<cr>
map <left> :bp<cr>

(Поместите это в ~ / .vimrc)

Но иногда я жую сэндвич или что-то еще при прокрутке файла, и я действительно хочу, чтобы клавиши со стрелками работали нормально. Я думаю, что наиболее целесообразно, чтобы клавиши со стрелками имели вышеуказанную функциональность переворачивания буфера, только если на самом деле открыто несколько буферов.

Есть ли способ расширить вышесказанное для достижения этой цели?

Ответы [ 3 ]

3 голосов
/ 05 июня 2010

Я использую alt-direction для переключения между буферами.

nmap <A-Left> :bp<CR>
nmap <A-Right> :bn<CR>

Если вы измените значения по умолчанию для hl, стрелки будут более полезными. (Как изменение whichwrap, чтобы позволить hl проходить через конец строки.)

Я делаю нечто подобное с jk, чтобы отличать их от моих стрелок:

" work more logically with wrapped lines
set wrap
set linebreak
noremap j gj
noremap k gk
noremap gj j
noremap gk k

Это обернет длинные строки, и jk перейдет к тому, что выглядит как строка ниже. (Если у вас есть одна длинная строка, то вы переместитесь на часть этой строки под курсором.) Отлично подходит для редактирования прозы или длинных комментариев.

Смотри также

help showbreak
3 голосов
/ 03 июня 2010

Я бы предпочел совершенно другое отображение, потому что:

  • курсоры действительно полезны, и их отсутствие, потому что у вас есть скрытый буфер, сильно вас раздражает
  • некоторые плагины используют <left> и <right>, потому что они менее запутаны, чем l и h; эти плагины могут сломаться с такими отображениями

В любом случае, вы можете попробовать это:

nnoremap <expr> <right> (len(filter(range(0, bufnr('$')), 'buflisted(v:val)')) > 1 ? ":bn\<cr>" : "\<right>")
nnoremap <expr> <left> (len(filter(range(0, bufnr('$')), 'buflisted(v:val)')) > 1 ? ":bp\<cr>" : "\<left>")

Для просмотра документации по вышеприведенным штукам:

:h :map-<expr>
:h len()
:h filter()
:h range()
:h bufnr()
:h buflisted()
1 голос
/ 03 июня 2010

Я сопоставляю Tab и Shift + Tab, чтобы переключать буферы в обычном режиме (в моем понимании это имеет смысл, а клавиши ничего полезного не делают).

Добавьте это к вашему .vimrc

" Use Tab and Shift-Tab to cycle through buffers
nnoremap <Tab> bnext<CR>
nnoremap <S-Tab> :bprevious<CR>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...