Подтвердить что ты не робот

VIM: Маппируемые (неиспользуемые) ярлыки?

Я пытаюсь создать два сопоставления, которые эффективны для меня:

map X ddp

Что я буду использовать для удаления и вставки за один раз.

map X "_dw

Что бы удалить слово, не втягиваясь в регистр.

Однако я не хочу нарушать существующие, полезные ярлыки, поэтому мне интересно, какие ключи я могу использовать - любые предложения? Я слишком расстроен?

4b9b3361

Ответ 1

У vim help есть раздел: he map-which-keys

1.7 WHAT KEYS TO MAP                                    *map-which-keys*

If you are going to map something, you will need to choose which key(s) to use
for the {lhs}.  You will have to avoid keys that are used for Vim commands,
otherwise you would not be able to use those commands anymore.  Here are a few
suggestions:
- Function keys <F2>, <F3>, etc..  Also the shifted function keys <S-F1>,
  <S-F2>, etc.  Note that <F1> is already used for the help command.
- Meta-keys (with the ALT key pressed). |:map-alt-keys|
- Use the '_' or ',' character and then any other character.  The "_" and ","
  commands do exist in Vim (see |_| and |,|), but you probably never use them.
- Use a key that is a synonym for another command.  For example: CTRL-P and
  CTRL-N.  Use an extra character to allow more mappings.

See the file "index" for keys that are not used and thus can be mapped without
losing any builtin function.  You can also use ":help {key}^D" to find out if
a key is used for some command.  ({key} is the specific key you want to find
out about, ^D is CTRL-D).

Ответ 2

Многие плагины Vim используют начальный <Leader> для запуска своих последовательностей клавиш; это (обычно нормально) неиспользованный ключ, который настраивается пользователем.

  * <Leader> *    * mapleader *
Чтобы определить mapping, в котором используется mapleader ", специальная строка" <Leader> ". Он заменяется строковым значением" mapleader ".
Если "mapleader "не задано или пусто, вместо этого используется обратная косая черта. Пример:       : map <Leader> Aanother line <Esc>
Работает как:       : map\Aanother line <Esc>
Но после:       : let mapleader = "," 
Он работает так:       : map, Aanother line <Esc>

Обратите внимание, что значение mapleader" используется в момент mapping
определены. Изменение mapleader" после этого не влияет на уже определенные
отображения.

Ответ 3

Каждый символ ASCII, верхний и нижний регистр, используется для чего-то в Vim. Таким образом, вы собираетесь перезаписать что-то - просто выберите то, что вы не используете. Это может помочь использовать общую идиому для ваших собственных расширений. Я использую ведущую запятую, например:

map ,w :w!<CR>
map ,e :e #<CR>
imap ,, <ESC>

(Последнее особенно полезно для меня, так как мне в значительной степени не нужно писать две последовательные запятые в режиме вставки, и мне не нужно прокладывать путь до клавиши Esc.)

Ответ 4

Обычно я использую control + [letter] или alt + [letter] для большинства сопоставлений, и это безопасно, но следите за "w", поскольку это необходимо для оконных команд. Вы также можете быть заинтересованы в arpeggio.vim, который позволяет создавать сопоставления одновременно нажатых групп ключей - он будет значительно расширять возможности ваших сопоставлений с помощью нет опасности переназначения чего-либо. Например, вы можете сопоставить "dp" (одновременно), чтобы выполнить "ddp", чтобы удалить и вставить одну команду.

Ответ 5

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

И затем вы нажмете его, а затем вам придется беспокоиться.

Лично для таких команд, которые вы приводили в качестве примера, мне нравится Ctrl + некоторые комбинации клавиш. В vim есть много бесплатных, а буквы на левой стороне возле Ctrl делают приятную пару.

Btw, что вы пытаетесь сделать с этими сопоставлениями... Я понимаю второй (удалять слово за словом), но первое не имеет смысла для меня. Что он должен делать? Транспонирование линий?