Как я могу получить визуальный выбор vimscript?

11

Если у меня есть пара строк vimscript, которые я хочу протестировать перед тем, как вставить свой vimrc, можно ли визуально выбрать их, а затем получить их?

я пытался

  • сделать визуальный выбор v, затем движения, чтобы сделать выбор и т.д., затем
  • :'<,'>so

Но vim выдает ошибку

диапазон не допускается

также

:'<,'>w | so

дает

Используйте! написать частичный буфер

Как я могу получить визуально выбранный vimscript?

the_velour_fog
источник

Ответы:

11

В командной строке нажмите, <C-u>затем введите @*и введите.

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

:@*выполнит содержимое *регистра, которое содержит все, что визуально выбрано в данный момент.

Даже если выбранный / выделенный текст находится в вашем веб-браузере (firefox, chrome, ...), он будет работать, *реестр позволит вам получить к нему доступ непосредственно в vim.


Если текст выбран в буфер Vim, другое решение , чтобы скопировать его в названном регистре, например в регистр путем ввода "ay.

Затем в командной строке введите: <C-r>aи введите.
Ctrl+ rвыдаст вам подсказку, представленную символом "(подробнее читайте :h c_Ctrl-r).
В этом новом приглашении, если вы дадите имя регистру, его содержимое будет вставлено в командную строку, где вы сможете редактировать его перед выполнением.


Кроме того, если вы скопируете какой-либо текст без указания регистра, он будет доступен из неназванного регистра » .

Итак, предположим, что у вас есть строка vimscript в файле и вы хотите быстро ее получить, вы можете скопировать ее Y, а затем :<C-r>"ввести ее в командной строке с помощью: и ввести.

Наконец, если вы используете это последнее решение, есть проблема, о которой вы должны знать.
Если вы видите странный символ в командной строке, такой как это ^M, это обозначение каретки возврата каретки. Вы должны удалить его, иначе вы, вероятно, получите ошибку.

В итоге вы:

  1. скопируйте вашу строку vimscript с помощью Y
  2. переключиться в командный режим с :
  3. нажмите, <C-r>чтобы ввести запрос регистров
  4. типа "для вызова безымянного регистра
  5. нажмите Backspace, чтобы удалить ^Mперсонажа
  6. и нажмите ввод.
Сагино
источник
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, расширенный до нескольких строк и отредактированный callс диапазоном или без, в зависимости от режима отображения [nv].

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