Вставить переназначение одного символа

У меня есть система для вставки одного символа в vim — я использую :nmap <Space> i_<Esc>r. Однако по какой-то причине это, кажется, мешает моему переназначению побега. Я переназначил escape с помощью :imap kj <Esc>.

Всякий раз, когда я нажимаю kj, vim вставляет _ прямо перед моим курсором, а затем меняет то, что я нажал на пробел. Я не могу понять, почему эти вещи взаимодействуют таким образом. Может ли кто-нибудь пролить свет на этот вопрос? Я ценю его.

Вот весь мой vimrc

"general settings
syntax on
filetype plugin on
set number
set smd
set ru

"Leader
let mapleader=','
nmap <Leader>w :w<Enter>
nmap <leader>e :wq<Enter>
nmap <leader>q :q!<Enter>

"remappings
nmap ; :
imap kj <Esc>
nmap <Space> i_<Esc>r

"au comands
au Filetype python source ~/.vim/scripts/python.vim
au Filetype ruby source ~/.vim/scripts/ruby.vim
au Filetype c source ~/.vim/scripts/c.vim

person Brandon    schedule 04.07.2013    source источник


Ответы (2)


Измените каждый nmap на nnoremap и каждый imap на inoremap и посмотрите, сохраняется ли проблема.

Убедитесь, что у вас нет пробелов в конце.

Прочитайте :h 40.1 полностью.

Прочтите главу "Строгое сопоставление" в Усложненный путь изучения Vimscript.

person glts    schedule 04.07.2013
comment
Каждый пользователь Vim должен прочитать эту книгу. Даже если вы не планируете писать Vimscript, вы узнаете гораздо больше о том, как эффективно использовать Vim. Варианты -noremap следует использовать всегда, как говорит Стив Лош. - person d11wtq; 05.07.2013

У вас, вероятно, есть конечные пробелы в вашем сопоставлении. В дополнение к изменению *map на *noremap, как предложил @glts, что, вероятно, изменит поведение от вставки текста и т. д. до простого перемещения курсора на одну позицию вперед (действие по умолчанию для пробела) и должно быть выполнено по другим причинам, объясненным в ссылках, на которые ссылается @glts вы должны сделать одно из следующих действий, чтобы выделить конечные пробелы:

  1. set list listchars+=trail:-: это покажет специально выделенные - вместо завершающих пробелов.
  2. Выполнить поиск: / $<CR> (/, <Space>, $, <CR>).
  3. Запустите поиск, используя match (можно поместить в vimrc): let g:trailing_match_nr=matchadd('Error', '\s\+$'): это выделит конечные пробелы с помощью группы выделения Error.

Убедитесь, что вы удалили все ненужные конечные пробелы, выделенные одним из этих способов. Я лично предпочитаю первый.

person ZyX    schedule 05.07.2013