Как по-разному отображать ключи в vim для разных типов буферов - PullRequest
4 голосов
/ 12 марта 2010

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

Мне было интересно, можно ли сопоставить ключи в зависимости от буфера, в котором они используются.

EDIT - Я добавляю больше информации для этого вопроса Давайте рассмотрим сценарий. Я хочу сопоставить <C-F4>, чтобы закрыть буфер / окно. Теперь это поведение может зависеть от ряда вещей.

Если я редактирую буфер, он должен просто закрыть этот буфер без изменения макета окон. Я использую buffkil плагин для этого.

Это зависит не от расширения файла, а от типа буфера. Я видел в документации vim, что есть не перечисленные и перечисленные буфера. Так что если он указан в буфере, он должен закрываться с помощью команд bufkill.

Если это не указанный буфер, следует использовать команду <c-w>c, чтобы закрыть буфер и изменить компоновку окна.

Я новичок в написании функций / скриптов vim, может кто-нибудь помочь мне с этим начать

Ответы [ 4 ]

4 голосов
/ 20 марта 2010
function KillBuffer()
    if &buflisted
         " bufkill command here
    else
         execute "normal! \<C-w>c"
    endif
endfunction
noremap <C-F4> :call KillBuffer()<CR>

Поместите это в свой .vimrc Или, если вы хотите обрабатывать окно быстрого исправления как незарегистрированные буферы (в моем Vim это указано):

function KillBuffer()
    if &buflisted && !&filetype=="qf"
         " bufkill command here
    else
         execute "normal! \<C-w>c"
    endif
endfunction
noremap <C-F4> :call KillBuffer()<CR>

Согласно руководству, вы можете заменить execute "normal! \<C-w>c" на более простой close! в приведенных выше сценариях.

1 голос
/ 12 марта 2010

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

плагин для филе

Затем создайте плагин для файлового типа. Под Unix создайте файл с именем ~ / .vim / after / ftplugin / [file-type-name] .vim и поместите туда свое отображение. В Windows это каталог $ HOME / vimfiles / after / ftplugin. [File-type-name] - это тип, обнаруженный Vim, иногда совпадающий с расширением имени файла, например, c.vim, python.vim и т. Д. Vim может сказать вам, какой это тип после открытия файла, если вы введете

: эхо & фут

1 голос
/ 12 марта 2010

Вы можете перехватывать загрузку определенных типов файлов и назначать определенные буферы сопоставления.

au! BufRead *.ext call <SID>init_hotkeys()

function s:init_hotkeys()
    nnoremap <buffer> <CR> :Action<CR>
endfunction

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

function s:close_buffer()
   if &buflisted
      " your command here from the killbuf plugin
      echo "Listed Buffer"
   else
      wincmd c
      " or
      " normal <c-w>c
   endif
endfunction

nnoremap <C-F4> :call <SID>close_buffer()<CR>
0 голосов
/ 24 февраля 2011

Я использую это в моем vimrc для вставки пустой строки выше или ниже текущей строки, используя только return и shift-return (в отличие от o<Esc> или O<Esc>), не влияя на поведение открытого файла, которое вы хотите в Список быстрых исправлений.

" Use enter to insert newlines in normal mode, but not in quickfix
function! s:insert_line(direction)
  if &buftype == "quickfix"
    execute "normal! \<Enter>"
  else
    if a:direction == 'below'
      execute "normal! o\<Esc>"
    else
      execute "normal! O\<Esc>"
    endif
  endif
endfunction

nmap <Enter> :call <SID>insert_line('below')<CR>
nmap <S-Enter> :call <SID>insert_line('above')<CR>

Надеюсь, кто-то найдет это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...