Вы используете vim в терминале или версию с графическим интерфейсом (gvim, macvim)?
Ник Ноулсон
Также обратите внимание, что если ваши encodingизменения после выполнения сопоставления, то, что вы получаете от клавиш Alt, может не совпадать с тем, что вы изначально установили.
dash-tom-bang
Ответы:
138
Для пользователей Mac: для сопоставления ALT + hjkl используйте вместо этого настоящий сгенерированный символ (выясните, какой символ с помощью комбинации в режиме INSERT), например, с моей клавиатурой я получаю:
<ALT+j> ==> ª
<ALT+k> ==> º
и так далее. Решение найдено здесь, на StackOverflow.
Я использовал это для перемещения строк вверх и вниз с помощью ALT + k \ j, используя это на моем .vimrc:
ДОПОЛНЕНИЕ ПО Dylan_Larkin (2019): Для этого , чтобы работать на Mac, « Использование опции как Meta Key » должна быть включена OFF в Terminal-> Настройки-> Клавиатура
Это как раз то, для чего я сюда пришел (Alt + HJKL для перемещения разбиения)! Благодаря!
Джейми Шембри
6
Самый простой способ узнать, какой это символ - использовать cat. Просто введите catв окне кошки нужную комбинацию клавиш. Выяснилось, что alt + скобки - это 'и «на моем Mac.
dvcrn
4
это отлично работает, как Alt + HJKL для перемещения между разделениями, моим пальцам это нравится !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
Джон Моралес
3
Эти точные сопоставления могут не работать должным образом в будущих версиях OSX. Используйте sed -n lдля просмотра вывода <Ak> и <Aj> перед настройкой сопоставления. В моем случае <Aj> есть, ∆а <Ak>˚
luk3thomas
4
В macOS при настройке Use Option as Meta Keyили в профиле iTerm ⌥ key to Esc+будет вести себя как обычно (как в Linux / Unix). Таким образом, вам не нужно устанавливать в Vim карту <^[j>, просто сопоставьте ее <A+j>или, <M+j>и она работает.
goetzc 02
40
:help key-notationописывает, какой формат необходимо использовать для сопоставления различных ключей. В случае alt вы можете использовать либо <A-или <M-. Итак, ваше отображение будет
map <M-d> <C-d>
Я также рекомендовал бы использовать noreвариант :map(например, noremap), если вы явно не хотите разрешить переоценку правой части для сопоставлений.
Это по-прежнему не имеет никакого эффекта. Alt + D по-прежнему вводит в Vim какой-то странный символ.
Thomson
9
Это отдельная тема. Ваш терминал отправляет Vim многобайтовый символ, и Vim не знает, как его интерпретировать <A-d>. Вероятно, вам нужно изменить настройки вашего терминала, чтобы он отправлял <A-d>как <Esc>d.
jamessan
1
@jamessan как это сделать на iterm2?
Finn
33
Я больше не уверен, что это «возможно». Пожалуйста, прочтите обновление ниже.
Да, вы можете даже в терминальном vim, но нет реального ответа на все вопросы. В основном вам нужно выполнить два шага:
Убедитесь, что <M-d>обозначение существует, и точно укажите, что вводит ваш терминал ( ^[это escape-символ):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
Сопоставьте что-нибудь с вашей недавно "созданной" комбинацией:
noremap <M-d> :echo "m-d works!"<cr>
Понимая, как это работает, вы можете расширить этот «трюк» на другие «странные» комбинации, например, я использую термит, а vim не распознает <S-F1>, используя cat, которую я получаю ^[[1;2P. Затем в моем vimrc я делаю:, execute "set <S-F1>=\e[1;2P"а затем я могу сопоставить его с чем угодно.
Примечание: я не знаю почему, но для некоторых людей \<Esc>работает вместо \e.
Обновление (февраль 2016 г.)
В зависимости от terminfo, который запускает ваш терминал, возможно, вы могли бы ... в большинстве терминалов, например, отображается "alt + h", то ^[hесть: "escape + h". Так он мог перезаписывать ключи. Я только что попробовал (снова), и, похоже, это сработало, но я считаю, что это очень ошибочная и подверженная ошибкам реализация.
Тем не менее, для достаточно смелых есть экспериментальный плагин:
Вместо execute "set...вещей вы можете просто использовать напрямую set <M-d>=^[d. На ^[самом деле это escape-символ, введенный с C-v-Esc. Это было необходимо в rxvt / urxvt, но xterm не нуждается в особой обработке. Больше информации по этой теме в вики vim .
Мика Эллиотт
Есть ли аналогичный подход к этому, который работал бы с tmux, чтобы, например, можно было связать Md?
Джордж
2
Для меня, <Esc>то dтеперь делает то же самое, <Alt>+ d. Кроме того, вы можете просто сделать это в одной строке с Ctrl-v, <Esc>как здесь .
Sparhawk
24
Клавиша Alt на карте в Vim на Mac OSx:
Начните с просмотра кода ключа, который ваш терминал отправляет в vim:
$ sed -n l
^[[1;9D
В приведенном выше примере я выполнил команду и нажал Alt + Left.
Это ^[[1;9Dэкранированная последовательность, отправляемая в vim, поэтому мы можем использовать ее для нашего сопоставления.
Если вы используете приложение iTerm2, хорошо бы проверить, как отображаются ключи, в Профиле> Ключи.
fikovnik
1
С левой Optionклавишей ( ⌥), настроенной как Esc+в iTerm2, я мог alt+qбы выйти из vim: nnoremap <silent> <Esc>q :qa!<cr>
ryenus
Вы также можете настроить iTerm2 для работы с этим переназначением, если вы перейдете в «Настройки»> «Профили», выберите свой текущий профиль, перейдите на вкладку «Ключи» для этого профиля и измените параметр с надписью «Левая ⌥ Клавиша» на «Esc +» (доступно варианты: «Нормальный», «Мета» и «Esc +»).
Кажется, это все еще не работает. Alt + d будет вводить странный символ в Vim, как и в случае unmap.
Thomson
У меня работает (я использую gvimв Windows)
Deqing
8
Ваш терминал может некорректно передавать Alt-D. Вы можете использовать CV, чтобы фактически получить фактическую escape-последовательность, отправленную в Vim, и использовать ее для создания вашего сопоставления. Т.е. отредактируйте свой .vimrc и замените фактический, набрав следующую последовательность «CV Alt-D», чтобы у вас была правильная escape-последовательность в вашем vimrc. Это не сработает, если ваш терминал ничего не отправляет в vim.
Мне также пришлось сменить nnoremap <Esc>j :m .+1<CR>==
конфиг
0
Привет, после того, как после многих лет тестирования всего вышеперечисленного на Mac хорошего решения не было, я продолжил поиск.
Вот мое решение:
Чтобы создать комбинацию клавиш, включая Alt, вы должны объявить комбинацию в настройках> клавиатура и использовать эту комбинацию в файле установки vim (отметьте опцию использования как мета-клавишу).
Вывод должен быть необычным символом ( aнапример, нет), чтобы вы не переопределяли обычный символ.
В приведенном ниже примере у вас должно получиться довольно сильно работать с ALT-Up.
encoding
изменения после выполнения сопоставления, то, что вы получаете от клавиш Alt, может не совпадать с тем, что вы изначально установили.Ответы:
Для пользователей Mac: для сопоставления ALT + hjkl используйте вместо этого настоящий сгенерированный символ (выясните, какой символ с помощью комбинации в режиме INSERT), например, с моей клавиатурой я получаю:
и так далее. Решение найдено здесь, на StackOverflow.
Я использовал это для перемещения строк вверх и вниз с помощью ALT + k \ j, используя это на моем .vimrc:
как объяснено здесь .
Надеюсь, это будет полезно, наслаждайтесь Vim :)
ДОПОЛНЕНИЕ ПО Dylan_Larkin (2019): Для этого , чтобы работать на Mac, « Использование опции как Meta Key » должна быть включена OFF в Terminal-> Настройки-> Клавиатура
источник
cat
. Просто введитеcat
в окне кошки нужную комбинацию клавиш. Выяснилось, что alt + скобки - это 'и «на моем Mac.nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
для просмотра вывода <Ak> и <Aj> перед настройкой сопоставления. В моем случае <Aj> есть,∆
а <Ak>˚
Use Option as Meta Key
или в профиле iTerm⌥ key to Esc+
будет вести себя как обычно (как в Linux / Unix). Таким образом, вам не нужно устанавливать в Vim карту<^[j>
, просто сопоставьте ее<A+j>
или,<M+j>
и она работает.:help key-notation
описывает, какой формат необходимо использовать для сопоставления различных ключей. В случае alt вы можете использовать либо<A-
или<M-
. Итак, ваше отображение будетЯ также рекомендовал бы использовать
nore
вариант:map
(например,noremap
), если вы явно не хотите разрешить переоценку правой части для сопоставлений.источник
<A-d>
. Вероятно, вам нужно изменить настройки вашего терминала, чтобы он отправлял<A-d>
как<Esc>d
.Я больше не уверен, что это «возможно». Пожалуйста, прочтите обновление ниже.
Да, вы можете даже в терминальном vim, но нет реального ответа на все вопросы. В основном вам нужно выполнить два шага:
Убедитесь, что
<M-d>
обозначение существует, и точно укажите, что вводит ваш терминал (^[
это escape-символ):Сопоставьте что-нибудь с вашей недавно "созданной" комбинацией:
Понимая, как это работает, вы можете расширить этот «трюк» на другие «странные» комбинации, например, я использую термит, а vim не распознает
<S-F1>
, используя cat, которую я получаю^[[1;2P
. Затем в моем vimrc я делаю:,execute "set <S-F1>=\e[1;2P"
а затем я могу сопоставить его с чем угодно.Примечание: я не знаю почему, но для некоторых людей
\<Esc>
работает вместо\e
.Обновление (февраль 2016 г.)
В зависимости от terminfo, который запускает ваш терминал, возможно, вы могли бы ... в большинстве терминалов, например, отображается "alt + h", то
^[h
есть: "escape + h". Так он мог перезаписывать ключи. Я только что попробовал (снова), и, похоже, это сработало, но я считаю, что это очень ошибочная и подверженная ошибкам реализация.Тем не менее, для достаточно смелых есть экспериментальный плагин:
источник
execute "set...
вещей вы можете просто использовать напрямуюset <M-d>=^[d
. На^[
самом деле это escape-символ, введенный сC-v-Esc
. Это было необходимо в rxvt / urxvt, но xterm не нуждается в особой обработке. Больше информации по этой теме в вики vim .<Esc>
тоd
теперь делает то же самое,<Alt>
+d
. Кроме того, вы можете просто сделать это в одной строке сCtrl-v
,<Esc>
как здесь .Клавиша Alt на карте в Vim на Mac OSx:
Начните с просмотра кода ключа, который ваш терминал отправляет в vim:
В приведенном выше примере я выполнил команду и нажал Alt + Left.
Это
^[[1;9D
экранированная последовательность, отправляемая в vim, поэтому мы можем использовать ее для нашего сопоставления.источник
Option
клавишей (⌥
), настроенной какEsc+
в iTerm2, я могalt+q
бы выйти из vim:nnoremap <silent> <Esc>q :qa!<cr>
Использование:
Смотрите
:help key-notation
.источник
gvim
в Windows)Ваш терминал может некорректно передавать Alt-D. Вы можете использовать CV, чтобы фактически получить фактическую escape-последовательность, отправленную в Vim, и использовать ее для создания вашего сопоставления. Т.е. отредактируйте свой .vimrc и замените фактический, набрав следующую последовательность «CV Alt-D», чтобы у вас была правильная escape-последовательность в вашем vimrc. Это не сработает, если ваш терминал ничего не отправляет в vim.
источник
Мой терминал будет выдавать
^[x
команды (например, для alt-x). Что заставило его работать внутри Vim, так это небольшой скрипт с vim.wikia.com :Добавьте в .vimrc, чтобы исправить все сопоставления клавиш alt.
источник
в качестве продолжения ответа Бруно для пользователей Mac попробуйте убедиться, что ваш ключ выбора сопоставлен
Esc+
.Это даст вам «нормальное» поведение
A
клавиши option ( ) в Vim.Например, в
iterm2
этой опции можно найти вPreferences > Profiles > Keys
:источник
nnoremap <Esc>j :m .+1<CR>==
Привет, после того, как после многих лет тестирования всего вышеперечисленного на Mac хорошего решения не было, я продолжил поиск.
Вот мое решение:
Вывод должен быть необычным символом (
a
например, нет), чтобы вы не переопределяли обычный символ.В приведенном ниже примере у вас должно получиться довольно сильно работать с ALT-Up.
Настройка vim:
настройка Mac:
источник