Сценарии общих задач в Vim - PullRequest
11 голосов
/ 01 ноября 2008

При использовании Vim (дома и на работе) я часто сталкиваюсь с подобными вещами. Например, я могу превратить кучу CSV-текста в серию вставок SQL. Я использую Vim в течение многих лет, но только недавно я пытался всерьез задуматься о том, как я могу улучшить свою производительность, используя его.

У меня вопрос: есть ли хороший (или правильный) способ хранения часто используемых команд или последовательностей команд? И как лучше всего их выполнить? Было бы неплохо иметь возможность использовать тот же сценарий в сеансе в реальном времени, а также в командной строке для какого-либо файла.

Я надеюсь, что смогу сохранить их в файле .vim, чтобы передать их коллегам (которые не очень хорошо разбираются в vim) для их использования.

Ответы [ 4 ]

14 голосов
/ 01 ноября 2008

Вы можете хранить свои макросы общих задач в файлах .vim, например this , а затем загружать их с помощью команды : так file.vim

Здесь вы можете найти кучу полезных макросов, также я рекомендую вам хорошо изучить полезную q запись макросов , она очень и очень мощная. ..

Макросы, созданные с помощью команды q , хранятся в регистре, qq сохраняет макрос в регистре q, поэтому, когда вы заканчиваете запись, вы можете просто вставить макрос с помощью "qp и сохраните его, позже вы можете загрузить его, просто вставив макрос в регистр, т.е. Существует скрипт Vim для хранения макросов q :

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

Также взгляните на Язык сценариев Vim .

3 голосов
/ 02 ноября 2008

Я использую q / @ для записи / воспроизведения макроса довольно часто.

Следующим шагом является попытка написать что-то вроде 3 или менее бывших команд.

Если чего-то настолько сложного, что ни макроса, ни короткой последовательности ex не хватит, я вместо этого пишу это как скрипт Perl. Язык сценариев vim слишком ограничен, чтобы пытаться делать великие вещи, на мой вкус. (Хотя vim 7 добился больших успехов в этом отношении, позаимствовав кучу вещей из Python.)

Обратите внимание, что @ делает что-то очень простое: он берет содержимое регистра и воспроизводит его так, как будто вы набрали его в обычном режиме. Точно так же q просто записывает последовательность, которую вы вводите в регистр, который вы называете. Это те же самые регистры , которые вы используете для поиска / размещения - это означает, что вы можете напрямую вставить записанную последовательность в файл (.vimrc любой?) Или извлечь последовательность команд из файла и воспроизвести это (чтобы вы могли хранить кучу их в ~/my-vim-macros.txt или что-то в этом роде).

2 голосов
/ 01 ноября 2008

Вы можете сохранить последовательности команд в вашем .vimrc и назначить им привязку клавиш с помощью команды :map. Например:

echo >>~/.vimrc ":map ,c :%s/,/','/g<CR>:%s/^/('/g<CR>:%s/$/'),/g<CR>"

При нажатии «,c» во время сеанса в реальном времени ваш файл CSV преобразуется в часть оператора INSERT.

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

vim file.txt -c ':normal ,c | :x'

Возможно, есть лучший способ, но это работает.

1 голос
/ 01 ноября 2008

Лично, и, возможно, отчасти потому, что я использовал Unix задолго до того, как появился vim (черт, у первой версии Unix, которую я использовал, тоже не было "vi" - но это другая история), я обычно использовал бы 'оболочку' script '(или, более вероятно, скрипт Perl), чтобы сделать преобразование. При преобразовании данных CSV в INSERT работа с кавычками / не-кавычками и встроенными запятыми в полной общности является беспорядочной - вероятно, я бы хотел использовать скрипт Perl с Text :: CSV_XS, чтобы гарантировать правильный синтаксический анализ. Затем я запустил бы этот сценарий для диапазона текста, который нужно конвертировать.

Одним из преимуществ этого является сфокусированный инструментальный подход - один инструмент выполняет одну работу правильно. В моем личном каталоге bin содержится 300 или более скриптов и программ; каталог RCS содержит более 500 сценариев.

Это не значит, что скрипты в vim плохие. Я использую (более или менее) сложные команды карты для написания сложных манипуляций, часто, когда мне нужно сделать одно и то же изменение для набора файлов, и когда я не думаю, что будет стоить создать сценарий для работа. Однако, если я думаю, что изменения могут понадобиться более одного раза, я запишу их. Например, GCC начал понимать (около 2005 г.), что не нужно встраивать неиспользуемые статические строки в объектные файлы, что означало, что моя информация об управлении версиями не была видна. Итак, в течение нескольких лет, когда я редактировал исходные файлы, я преобразовывал статическое (фиксированное) имя в публичное - неохотно, но обязательно AFAIAC. У меня есть скрипт, который редактирует меня, поэтому, когда мне нужно внести изменения в файл, я запускаю этот скрипт для этого. У меня есть другой скрипт, который обновляет информацию об авторских правах; Мне нужно это каждый раз, когда я впервые изменяю файл в данном году. Да, я мог бы спрятать это как что-то в vim - я вырос, думая, что отдельный сценарий лучше, не в последнюю очередь потому, что если я переключаюсь на любой другой редактор, я все равно могу использовать сценарий.

...