Як я можу отримати джерело візуального підбору vimscript?


12

Якщо у мене є пара рядків вимскрипту, які я хочу перевірити перед тим, як розмістити свій vimrc, чи можна візуально вибрати, а потім вивести їх?

я намагався

  • зробіть візуальний вибір v, потім запропонуйте зробити вибір тощо
  • :'<,'>so

Але vim дає помилку

не дозволяється діапазон

також

:'<,'>w | so

дає

Використовуйте! написати частковий буфер

Як я можу створити візуально вибраний вимскрипт?

Відповіді:


11

У командному рядку натисніть, <C-u>а потім введіть @*і введіть.

<C-u>видалить візуальний діапазон '<,'>, який було автоматично вставлено, якщо візуально вибрано якийсь текст.

:@*буде виконувати вміст *реєстру, який містить те, що візуально обрано на даний момент.

Навіть якщо вибраний / виділений текст знаходиться у вашому веб-переглядачі (firefox, chrome, ...), він буде працювати, *реєстр дозволить вам отримати доступ до нього безпосередньо в vim.


Якщо текст обраний в буфер Vim, інше рішення , щоб скопіювати його в названому регістрі, наприклад в регістр шляхом введення "ay.

Потім в командному рядку наберіть: <C-r>aі введіть.
Ctrl+ rнадасть вам своєрідну підказку, представлену символом "(для більш детальної інформації читайте :h c_Ctrl-r).
У цьому новому запиті, якщо ви вкажете ім’я реєстру, його вміст буде вставлено в командний рядок, де ви зможете редагувати його перед виконанням.


Крім того, якщо ви скопіюєте якийсь текст, не вказуючи реєстр, він буде доступний з реєстру без назви " .

Отже, припустимо, у вас є файл вимскрипту у файлі і хочете швидко його джерело, ви можете скопіювати його Y, а потім надіслати його в командному рядку за допомогою: :<C-r>"і ввести.

Нарешті, якщо ви використовуєте це останнє рішення, ви маєте знати лише проблему.
Якщо в такому командному рядку ви бачите дивного символу ^M, це позначення каретки повернення каретки. Ви повинні її видалити, інакше ви, ймовірно, отримаєте помилку.

Підсумовуючи, ви:

  1. скопіюйте рядок vimscript за допомогою Y
  2. перейти в режим команд за допомогою :
  3. натисніть, <C-r>щоб ввести запит на регістри
  4. тип "для виклику реєстру без назви
  5. натисніть назад, щоб видалити ^Mперсонаж
  6. і натисніть Enter.

1
Солодке! : D прекрасно працює - я ніколи не зустрічав @*раніше, дякую!
the_velour_fog

Я радий, що тобі допомогло. Я відредагував відповідь, щоб запропонувати інше рішення.
saginaw

1
приємно, я спробував вашу пропозицію щодо : <C-r>a його використання насправді справно працював :) Я думаю, що vim прочитав ^M's як рядок повертається - і виконав кожен як окремий рядок / команду?
the_velour_fog

Це гарне запитання, чесно кажучи, я не знаю. Зазвичай, якщо я не видаляю цього персонажа, у мене виникають помилки. Я радий, що це працювало на тебе без помилок. Можливо, хтось, хто має більше знань з цього питання, пояснить нам, як vim ставиться до таких особливих персонажів.
saginaw

2

Я насправді роблю це дещо інакше, я просто вношу зміни в моєму vimrc і відновлюю його щоразу, коли пишу. (У мене є каскадний набір файлів vimrc, тому це дозволяє мені змінити будь-який з них.)

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif

2

Більш безпосередньо на запитання, ніж на іншу мою відповідь, ви можете визначити відображення, подібне до цього ( nnoremapбез вибору, просто виконайте поточний рядок; vnoremapдля того, коли візуальний режим активний):

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

В обох випадках "поточний рядок" є :executed, тому у візуальній версії ви проводите :executeодин рядок за іншим шляхом візуального вибору.

Як зазначено в іншій відповіді, <C-u>видаляється специфікація діапазону, яка з'являється в командному рядку при :введенні. Ці |символи повинні бути екрановані , тому що в іншому випадку вони інтерпретуються як кінець vnoremapкоманди.

Це також може бути перетворено на функцію позбавлення від рятувальної гімнастики, але це наразі не здається для мене величезною перемогою. Це, в основному, vnoremap, розширений на кілька рядків і called з діапазоном або не залежно від режиму [nv] відображення.


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