LINUX.ORG.RU

Почему не работает в vim: imap <S-CR> <CR><CR>end<Esc>-cc (в терминале)

 ,


0

1

Хотелось бы забиндить такую конструкцию для ruby:

imap     <S-CR>    <CR><CR>end<Esc>-cc

например для:

if name == "не нужно" <--------------  здесь жамкаю Enter
  <----------------------------------  телепортируюсь сюда
end <--------------------------------  но автоподставляет мне end

ну и там для def, do, class, while, unless и так далее.

Пробовал <C-CR> - тоже не работает, в том числе не только на VTE-based терминалах.

Как запилить?

P.S. заметил, что в gvim - работает, а как в терминалах-то?

★★☆

Последнее исправление: science (всего исправлений: 2)

Ответ на: комментарий от Homura_Akemi

snipmate, neosnippet и прочее мне неудобно использовать, т.к. приходится порой чистить мусор, который эти сниппеты вставляют. Неудобно. Аббревиатуры вариант тоже так себе, я поигрался с ними но не смог добиться желаемого универсального поведения. К тому же с сниппетами вопрос на какую клавишу вешать, если удобные Tab и другие варианты уже заняты.

Хотелось бы управляемого поведения шортката в терминале: нажать Shift + переход на след. строку, перейти на неё и на след. подставить end. Всё.

science ★★☆
() автор топика
Последнее исправление: science (всего исправлений: 2)
Ответ на: комментарий от science

Ну попробуйте тогда в xterm или urxvt назначить на S-Return какую-нибудь последовательность, которую vim может понять. Не думаю, что есть другие способы использовать это сочетание в терминале.

Homura_Akemi
()
Ответ на: комментарий от Homura_Akemi

Нашел интересный вариант решения проблемы:

you can still make the desired combination work if your terminal application has the ability to remap key combinations (as iTerm2, for example, does). Map the terminal application's combination to some Unicode character you'll never use, then map that key in Vim to the desired effect, and you can get around this limitation.

For this example, in iTerm2, open the Keys Preferences pane, add a Global Shortcut key, input shift and return, give it an action of Set Text, and then put ✠ (a Maltese Cross, but you could use any random unlikely-to-be-used Unicode character) as its value. In your .vimrc, add these lines:

" Map ✠ (U+2720) to <Esc> as <S-CR> is mapped to ✠ in iTerm2.
inoremap ✠ <Esc>

Or:

inoremap <S-CR> <Esc>
" Map ✠ (U+2720) to <S-CR>, so we have <S-CR> mapped to ✠ in iTerm2 and
" ✠ mapped back to <S-CR> in Vim. 
imap ✠ <S-CR>

Entering <S-CR> in Vim in iTerm2 will now ultimately result in <Esc> in Vim as desired.

Т.е. ход конём, ремапим в самом терминале срабатывание произвольного неиспользуемого обычно кода нажатия на <S-CR> - и на него уже вешаем в самом виме <S-CR>

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

Я обычно использую x11-terms/terminal, sakura, lilyterm

science ★★☆
() автор топика
Последнее исправление: science (всего исправлений: 1)
Ответ на: комментарий от science

ремапим в самом терминале срабатывание произвольного неиспользуемого обычно кода нажатия на <S-CR>

Ну это и предлагалось.

Кажется urxvt/xterm так умеют

Умеют.

terminal, sakura, lilyterm

На VTE ловить нечего, это просто убожество. Возможно, такая функциональность есть в Konsole.

Homura_Akemi
()
Ответ на: комментарий от anonymous

Есть же плагин endwise для этого.

Жесть, спасибо огромное, работает! У меня установлены почти все плагины Tim Pope: pathogen, vim-rails, surround, fugitive и остальные) давно пользуюсь, а об этом не знал и не слышал. Спасибо дорогой анонимус.

science ★★☆
() автор топика
Ответ на: комментарий от science

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

а свои сниппеты создать религия не позволяет?

q11q11 ★★★★★
()

Как запилить?

Установить snipmate и не заниматься ерундой.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.