Автоматически создайте соответствие фигурным скобкам в энергии

Можно назвать сессию при запуске его с -S name опция. Из рабочего экрана можно изменить его путем ввода CTRL-a, :sessionname name. Можно просмотреть рабочие экранные сессии с screen -ls, и соединитесь с одним по имени с screen -xS name.

В рамках сессии одного экрана можно также назвать каждое окно. Сделайте это путем ввода CTRL-a, A затем имя Вы хотите. Можно просмотреть интерактивный список именованных окон путем ввода CTRL-a, ", и выберите тот, на который Вы хотите переключиться из того списка.

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

17
06.11.2012, 16:33
6 ответов

Лично я использую smartinput для автоматической вставки скобок и кавычек. Например, ввод { где угодно произведет {} с Вашим курсором в середине. Уехать { скобка группирует Вас, просто вводят } когда рядом со вставленным }.

Однако это действительно поддерживает Ваше требование позиций табуляции и переходящий к внешней стороне скобка. Это также не создает новое между Вашими скобками, но Вам просто нужен один дополнительный ключ для этого так или иначе - <CR>.

Вы могли отобразиться <C-J> переходить к следующей строке вниз:

:inoremap <C-J> <C-O>j

или если Вы хотели переместиться в запуск следующей строки:

:inoremap <C-J> <C-O>+
1
27.01.2020, 19:47

Как я автоматически создаю соответствие фигурным скобкам в энергии?

Эта проблема нетривиальна, как Вы будете видеть. Простой ответ: Используйте плагин, как автозавершение или smartinput. Просто наивно повторно отображаясь ([.. ключи подарят Вам edgecases в нескольких строках, именно поэтому эти плагины сделаны, и почему они обычно довольно сложны (если они хорошо работают).

Таким образом, я использовал UltiSnips для вставки закрывающей фигурной скобки

Вы могли попробовать это вместо этого (который отличается от моего исходного предложения):

inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>

Где UltiSnips разделит строку на ( вместо включения main в соответствии. Проблема с использованием плагина отрывка для этого состоит в том, что они (обычно) не поддерживают вложение, таким образом, они забудут любые положения перехода, когда следующий (вложенный) отрывок будет вставлен.

Для выпрыгивания из фигурной скобки соединяются, Ctrl-j комбинации используется.

Можно повторно отобразить Ctrl-j или для UltiSnips или для конфликтующего плагина. Если отображения не перечислены в документации, можно использовать :map/imap/nmap <key> показать отображение. Если Вы хотите, чтобы Ctrl-j привередливо выбрал и сделал работу обоих плагинов, Вы просите:

  1. что-то намного более усовершенствованное, чем я подозреваю, что Вы могли бы думать
  2. что-то я подозреваю Вас, действительно не хочет

Рассмотрите этот цикл удара:

while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
  [next_snippet_position_marker]
done

В этом случае необходимо будет нажать Ctrl-j 5 раз для получения до тела цикла. Используя закрывающие фигурные скобки для выпрыгивания из соответствующей пары дает Вам намного больше контроля того, где Вы на самом деле хотите, чтобы курсор переместился. Вы могли реализовать стек для отслеживания вставленных пар и Ctrl-j использования, чтобы появиться и переместиться, но затем Вы столкнетесь с проблемами, если Вы начнете вручную удалять фигурные скобки, не удаляя их из стека. Таким образом, Вы начнете решать проблемы, которые плагины фигурной скобки пытаются решить. Это - твердое колесо для переосмысления.

Подробно останавливаясь на этом, можно получить то, что Вы первоначально попросили, с помощью Ctrl-j для выпрыгивания из фигурных скобок и отрывков. Если Вы используете некоторое фиктивное значение, чтобы представить положения отрывков и продвинуть их на стек в дополнение к закрывающим фигурным скобкам с динамическим переотображением Ctrl-j соответствовать вручению отрывков или фигурных скобок. Но затем необходимо будет реализовать некоторую довольно усовершенствованную эвристику для выяснения, какое волшебство должно произойти, так как Вы по существу берете две проблемы сразу, который в настоящее время решается создателями плагинов вставки отрывка и плагинов соответствия фигурной скобки отдельно и разрешения этих проблем снова, сверх их решений, для достижения удобства и, ну, в общем, волшебства.

Это снижается для управления по сравнению с удобством. Я думаю, что управление будет обслуживать Вас лучше в этом случае, означая, что необходимо сохранить эти проблемы и их связанные плагины и keysmappings отдельными. Если Вы все еще хотите удобство, это выполнимо, но это твердо.

4
27.01.2020, 19:47

Что-то вроде этого могло бы удаться для Вас.

inoremap {      {}<Left>
inoremap {<CR>  {<CR>}<Esc>O
inoremap {{     {
inoremap {}     {}
0
27.01.2020, 19:47
  • 1
    То, что Вы предлагаете, является простым отображением, которое не позволяет перепрыгивать через закрывающую фигурную скобку. –  Marco 20.11.2012, 11:25

Я думаю, что delimitMate делает то, в чем Вы нуждаетесь.

Это автоматически закрывает круглые скобки или заключает в кавычки и помещает Ваш промежуточный курсор. Для выпрыгивания из пары круглых скобок (будучи в режиме вставки), Вы сделали бы Ctrl-g + g, но можно повторно отобразить это, чтобы быть Ctrl-j путем добавления этого к Вашему vimrc:

% Jump out of a block of parentheses (uses delimitMate)
imap <C-j> <C-g>g
1
27.01.2020, 19:47
  • 1
    Лучше предоставить больше подробную информацию здесь и использовать ссылку в качестве ссылки для дополнительных материалов для чтения. Тем путем Ваш ответ не освобождает все это значение, когда ссылка становится недопустимой. –  Anthon 26.01.2014, 17:28

Я нашел автотлозу, добавляя немного отставания, а также вмешиваюсь в мою настройку (Ultisnips и SuperTab), но мне нравится его подход для эмуляции Eclipse CDT.

Я использую DELIMITMATE с помощью следующих карт, чтобы помочь с навигацией и отступом, пытаясь получить те же результаты:

imap <C-F> <C-G>g           " To jump out brackets in same line.
inoremap <C-K> <ESC>ki<TAB> " To move and insert an indent on the line before the current cursor (assuming empty line)

Я использую его таким образом: вставьте открытие { CR> и начните писать в внутренней линии с отступом.

1
27.01.2020, 19:47

На самом деле Ultisnips может делать это почти идеально (это может быть новым). Слегка изменив приведенные выше ответы, я добился успеха с

inoremap () () = UltiSnips # Anon ('($ 1) $ 0', '()', 'двойные круглые скобки', 'i')

Необходимо ввести () , что будет лучше, но его также можно изменить на (. Затем дополнительные необязательные аргументы для UltiSnips # Anon ] являются описанием и модификатором i , который разрешает внутрисловное расширение.

Выход из круглых скобок с работает, а также вложен в другие фрагменты. Однако вызов вложенные круглые скобки () , похоже, нарушают эту функцию, что не имеет большого значения.

0
27.01.2020, 19:47

Теги

Похожие вопросы