Створіть командний рядок введіть команди <Esc> та Ctrl


11

Уявіть, що ви хочете цитувати слово нижче. Якщо |позиція курсору, ви можете легко цитувати це слово у cw""<Esc>Pзвичайному режимі.

|below

Я хочу досягти такої ж поведінки в режимі командного рядка. Моє запитання - як я можу сказати режиму командного рядка, який я хочу ввести <Esc>. Я спробував :norm cw""<Esc>Pі деякі інші варіанти, але я просто отримую ""<Esc>Pзамість цього "below".

Все ще пов'язане з цим, я хотів би знати, як я можу створювати команди Ctrl в режимі командного рядка. Наприклад, я можу cw"<C-r>""<Esc>замість цього цитувати вищезгадане слово . Але тоді мені знадобиться командний рядок для введення <C-r>для мене. Як я можу це зробити?


1
Як і <C-x><C-e>в редакторі для редагування командного рядка, у $EDITORвас є <C-f>у Vim, щоб відкрити вікно командного рядка. Див :help cmdline-window.
romainl

Відповіді:


11

<C-v>це те, що ви шукаєте. Це дозволяє вводити буквальні символи (наприклад, літерал Escзамість рядка "Esc"), не вимагаючи від вас нічого уникнути.

:norm cw""<C-v><Esc>P

відображається як:

:norm cw""^[P

і зробить те, що ви хочете (тобто, цитуйте слово). Ви також можете використовувати це з іншими <C-?>відображеннями. Наприклад, ваш другий запит:

:norm cw"<C-v><C-r>""

відображається як:

:norm cw"^R""

У результаті вийде те саме, що вище. Не потрібно додатково включати Escв кінці.


10

Це пояснюється тим, що спеціальні клавіші, як-от <Esc>не перекладаються в normalкоманди, і розглядаються так, як ви натиснули <Esc>. Щоб виправити це, можна скористатися execкомандою. Так:

:exec "norm cw\"\"\<Esc>P"

Зауважте, що ви повинні поставити зворотний проріз перед цитатами та <Esc>, а використання одиничних лапок замість подвійних лапок не буде працювати.


Чи працює це і для команд Ctrl? Як слід записати їх у команду?
Гонсало Рібейро

Так, це має працювати. Ви можете написати їх так:"\<C-{insert key}>"
EvergreenTree

2

Режим командного рядка інший; ви не можете використовувати там же (звичайний режим) команди редагування. Список команд можна знайти на :help c_CTRL-V.

Тепер є вікно командного рядка ( :help command-line-window), яке можна ввести через q:звичайний та <C-F>з режиму командного рядка. У цьому вікні ви можете використовувати всі звичайні команди та відображення, щоб це був варіант 1.

Варіант 2 - це спеціальні відображення для режиму командного рядка. Як я вже сказав, ви не можете використовувати підхід через :normalспівавторів. Ключовим для їх визначення є :help c_CTRL-\_eвідображення, яке "оцінює [s] {expr} і замінює [s] весь командний рядок результатом". Ось простий приклад, який працює правильно лише в кінці командного рядка:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
Я не думаю, що ОП означало створити відображення для командного рядка, але виконати відображення з командного рядка.
EvergreenTree
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.