vim: проблема с режимом вставки: не работают переназначения (imap) и сокращения (ab) в .vimrc - PullRequest
3 голосов
/ 28 января 2011

У меня проблема в vim: если я изменяю файл .vimrc и добавляю следующие строки:

map ;bb A78

, он просто работает в обычном режиме.Если я понял, он должен работать и в режиме вставки, не так ли?Во время редактирования я проверил, что все прочитано правильно (команда ": map"):

i  ;bb           A78

Если я сделаю то же самое с "imap", у меня возникнет та же проблема: команда ": imap"показывает, что он настроен, но если я перехожу в режим вставки и набираю"; bb "или"; bb "или"; bb ", ничего не меняется, я не получаю A78

Чего мне не хватает?(И чудесный плагин codeSnippet работает только в обычном режиме, что для меня большая проблема)

Если забыл уточнить: у меня есть только плагин Tabularize, это vim версии 7.3 подcygwin, но я получаю ту же проблему в SSH / Linux Debian / vim версии 7.0

Если я попытаюсь сделать именно то, что написано здесь (дать еще одну попытку, если это может помочь),это также не работает: «Чтобы использовать аббревиатуру, переключитесь в режим« Вставка »и введите th, а затем любые пробелы выше (пробел, табуляция или возврат каретки).» вообще не работает .Это сводит меня с ума.

Вот мой файл .vimrc, может быть, здесь что-то не так, я не видел:

set nocompatible
filetype plugin on
syntax enable

set ignorecase
set paste
set ruler
set modeline

set showcmd

set expandtab
set tabstop=2
set autoindent
set smartindent

set number
colorscheme desert

set vb t_vb=

set backup
set backupdir=~/.vim/backup
set directory=~/.vim/tmp
set fileencodings=utf-8,ucs-bom,default,latin1
set scrolloff=5
set undolevels=1000
nmap ;bw :. w! ~/.vimxfer<CR>
nmap ;br :r ~/.vimxfer<CR>
nmap ;ba :. w! >>~/.vimxfer<CR>

" Tell vim to remember certain things when we exit
"  '10 : marks will be remembered for up to 10 previously edited files
"  "100 : will save up to 100 lines for each register
"  :20 : up to 20 lines of command-line history will be remembered
"  % : saves and restores the buffer list
"  n... : where to save the viminfo files
set viminfo='10,\"100,:20,%,n~/.viminfo

" when we reload, tell vim to restore the cursor to the saved position
augroup JumpCursorOnEdit
 au!
 autocmd BufReadPost *
 \ if expand("<afile>:p:h") !=? $TEMP |
 \ if line("'\"") > 1 && line("'\"") <= line("$") |
 \ let JumpCursorOnEdit_foo = line("'\"") |
 \ let b:doopenfold = 1 |
 \ if (foldlevel(JumpCursorOnEdit_foo) > foldlevel(JumpCursorOnEdit_foo - 1)) |
 \ let JumpCursorOnEdit_foo = JumpCursorOnEdit_foo - 1 |
 \ let b:doopenfold = 2 |
 \ endif |
 \ exe JumpCursorOnEdit_foo |
 \ endif |
 \ endif
 " Need to postpone using "zv" until after reading the modelines.
 autocmd BufWinEnter *
 \ if exists("b:doopenfold") |
 \ exe "normal zv" |
 \ if(b:doopenfold > 1) |
 \ exe "+".1 |
 \ endif |
 \ unlet b:doopenfold |
 \ endif
augroup END

set backspace=2
inoremap <silent> <Bar>   <Bar><Esc>:call <SID>align()<CR>a

function! s:align()
  let p = '^\s*|\s.*\s|\s*$'
  if exists(':Tabularize') && getline('.') =~# '^\s*|' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
    let column = strlen(substitute(getline('.')[0:col('.')],'[^|]','','g'))
    let position = strlen(matchstr(getline('.')[0:col('.')],'.*|\s*\zs.*'))
    Tabularize/|/l1
    normal! 0
    call search(repeat('[^|]*|',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
  endif
endfunction

:autocmd BufNewFile  * silent! 0r ~/.vim/templates/%:e.tpl
:autocmd BufNewFile  *.php call search('w', '', line("w$"))

Большое спасибо!

Ответы [ 2 ]

7 голосов
/ 28 января 2011

Вы должны убедиться, что vim не находится в режиме вставки.

Попробуйте

:set nopaste
2 голосов
/ 28 января 2011

map не позволяет отображению работать в режиме вставки: для ВСЕХ режимов вы хотите map!. Для получения дополнительной информации см. :help :map!.

Тем не менее, imap должно работать, поэтому у вас, вероятно, есть проблемы с тайм-аутами или настройкой «вставки». Способ отображения в режиме вставки заключается в том, что он дает вам определенное время для входа в отображение (я думаю, по умолчанию это 1 секунда), и если вы набираете его медленнее, чем предполагается, вы подразумеваете отдельные символы. Так что если вы делаете:

:map! ;bb A78

А затем введите:

;<pause>bb

(где <pause> - это просто пауза, а не то, что вы печатаете)

Вы получите ;bb, но если вы наберете:

;bb

очень быстро, вы получите A78.

Чтобы узнать больше о тайм-аутах, взгляните на эти страницы справки:

:help 'timeout'
:help 'ttimeout'
:help 'timeoutlen'
:help 'ttimeoutlen'

Параметр 'paste' также оказывает влияние: он отключает сопоставления в режиме вставки и сокращения. Попробуйте :set paste?, чтобы выяснить, есть ли у вас этот набор, и :set nopaste, чтобы отключить его.

См:

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