Существует множество вопросов, где люди говорят о распространенных трюках, в частности, « Vim + ctags tips and tricks ».
Тем не менее, я не имею в виду часто используемые ярлыки, которые новичок в Vim нашел бы крутыми. Я имею в виду опытного пользователя Unix (будь то разработчик, администратор и т. Д.), Который думает, что знает что-то, о чем 99% из нас никогда не слышали и не мечтали. Что-то, что не только облегчает их работу, но и является ХОРОШИМ и хакерским . В конце концов, Vim находится в самой богатой темными операционными системами в мире, поэтому у него должны быть тонкости, о которых знают лишь немногие привилегированные люди и которые хотят поделиться с нами.
Ответы:
Может быть, это не тот, о котором 99% пользователей Vim не знают, но это то, чем я пользуюсь каждый день, и это должен знать любой пользователь Linux + Vim.
Основная команда, но чрезвычайно полезная.
Я часто забываю sudo перед редактированием файла, на который у меня нет разрешения на запись. Когда я прихожу, чтобы сохранить этот файл и получить ошибку разрешения, я просто запускаю эту команду vim, чтобы сохранить файл без необходимости сохранять его во временном файле, а затем снова скопировать его.
Очевидно, вы должны быть в системе с установленным sudo и иметь права sudo.
источник
sudo vim
. Вместо этого вы должны экспортироватьEDITOR
как VIM и запуститьsudoedit
.Что-то, что я недавно обнаружил, и которое мне показалось очень крутым:
Возвращает документ к тому, что было 15 минут назад. Может принимать различные аргументы для количества времени, которое вы хотите откатить, и зависит от уровней отмены. Может быть отменено противоположной командой
:later
источник
:later 8h
и я сделал на сегодня? : P:! [command]
выполняет внешнюю команду, пока вы находитесь в Vim.Но добавьте точку после двоеточия,
:.! [command]
и она выведет вывод команды в ваше текущее окно. Это: . !
Например:
Я часто использую это для таких вещей, как добавление текущей даты в набираемый документ:
источник
:.!date
является запись «даты» в строку, а затем выполнение!$sh
(в качестве альтернативы команда должна содержать пустую строку и выполнить!jsh
). Это передаст строку в оболочку "sh" и заменит выходные данные команды.:.!
на самом деле это особый случай:{range}!
, который фильтрует диапазон строк (текущая строка, когда диапазон находится.
) с помощью команды и заменяет эти строки выводом. Я считаю:%!
полезным для фильтрации целых буферов.sed
, если вы можете использовать аналогичные встроенные командыed
/ex
? Попробуйте запустить:.s/old/new/g
;-)Не совсем непонятно, но есть несколько команд удаления, которые очень полезны, например ..
diw
удалить текущее словоdi(
удалить в текущем паренсеdi"
удалить текст между кавычкамиДругие можно найти на
:help text-objects
источник
де Удалить все до конца слова, нажав кнопку. по желанию вашего сердца.
ci (xyz [Esc] - это странный вариант. Здесь 'i' не означает режим вставки. Вместо этого он означает внутри скобок. Таким образом, эта последовательность обрезает текст внутри скобок, в котором вы находитесь, и заменяет его на . «хуг» Он также работает внутри квадратных и фигурных скобках - просто сделать CI [или CI {соответственно , естественно, вы можете сделать ди (если вы просто хотите , чтобы удалить весь текст без ввода ничего вы также можете сделать..
a
аi
если вы Я хочу удалить скобки, а не только текст внутри них.ci " - вырезает текст в текущих кавычках
ciw - вырезает текущее слово. Это работает так же, как предыдущий, за исключением того, что
(
заменяется наw
.C - обрезать остальную часть линии и переключиться в режим вставки.
ZZ - сохранить и закрыть текущий файл (ПУТЬ быстрее, чем Ctrl-F4, чтобы закрыть текущую вкладку!)
ddp - переместить текущую строку на одну строку вниз
xp - переместить текущего персонажа на одну позицию вправо
U - заглавные, поэтому
viwU
слово переносится вверх~ - переключает регистр, поэтому
viw~
обратный регистр всего словаCtrl + u / Ctrl + d прокручивает страницу на пол экрана вверх или вниз. Это кажется более полезным, чем обычная полноэкранная подкачка страниц, так как это упрощает просмотр взаимосвязи двух экранов. Для тех, кто все еще хочет прокручивать весь экран одновременно, есть Ctrl + f для Вперед и Ctrl + b для Назад. Ctrl + Y и Ctrl + E прокручивают вниз или вверх по одной строке за раз.
Сумасшедшая, но очень полезная команда - zz - она прокручивает экран, чтобы эта строка появилась посередине. Это отлично подходит для помещения фрагмента кода, над которым вы работаете, в центр вашего внимания. Сестринские команды - zt и zb - делают эту строку верхней или нижней на экране, что не так полезно.
% находит и переходит к соответствующей круглой скобке.
де - удалить от курсора до конца слова (вы также можете сделать,
dE
чтобы удалить до следующего пробела)bde - удалить текущее слово, слева направо
df [пробел] - удалять до следующего пробела, включая следующий пробел
дт. - удалить до следующей точки
dd - удалить всю эту строку
ye (или yE) - переводит текст отсюда до конца слова
ce - прорезает конец слова
пока - копирует текущее слово (заставляет задуматься, что делает "привет"!)
гг - копирует текущую строку
cc - обрезает текущую строку, вы также можете сделать
S
вместо этого. Также есть нижняя крышка,s
которая обрезает текущий символ и переключается в режим вставки.Виви или Вивк . Снять или изменить текущее слово. Нажмите
w
несколько раз, чтобы выбрать каждое последующее слово, используйтеb
для перемещения назадvi { - выделить весь текст в квадратных скобках. va {- выделить весь текст, включая {} s
vi (p - выделите все внутри () и замените вставленный текст
b и e перемещают курсор слово за словом, как обычно делают Ctrl + Arrows . Хотя определение слова немного отличается, так как несколько последовательных разделителей рассматриваются как одно слово. Если вы начинаете с середины слова, нажатие кнопки b всегда приведет вас к началу текущего слова, а каждый последующий символ b перейдет к началу следующего слова. Точно так же, и легко запомнить,
e
переводит курсор в конец текущего и каждого последующего слова.аналогично
b
/e
, заглавнойB
иE
перемещайте курсор пословно, используя только пробелы в качестве разделителей.заглавная D (сделать глубокий вдох) Удаляет оставшуюся часть строки справа от курсора, так же как Shift + End / Del в обычных редакторах (обратите внимание на 2 нажатия клавиш - Shift + D - вместо 3)
источник
vity
иvitc
может быть сокращено доyit
иcit
соответственно..
).bye
не работает, когда вы находитесь в первом символе слова.yiw
всегда делает.Тот, который я редко нахожу в большинстве уроков Vim, но он НЕВЕРОЯТНО полезен (по крайней мере для меня), это
g; and g,
перемещаться (вперед, назад) через список изменений.
Позвольте мне показать, как я его использую. Иногда мне нужно скопировать и вставить часть кода или строки, скажем, шестнадцатеричный цветовой код в файле CSS, поэтому я ищу, прыгаю (не обращая внимания на совпадение), копирую его и затем возвращаюсь назад (g;) туда, где Я редактировал код, чтобы наконец вставить его. Не нужно создавать отметки. Simpler.
Просто мои 2цента.
источник
'.
перейдет к последней отредактированной строке и`.
перейдет к последней отредактированной позиции<C-o>
/<C-i>
для этого все время - или отмечаю свое место.Сделайте vim в шестнадцатеричный редактор.
Revert.
Предупреждение: если вы не редактируете с помощью двоичного файла (-b), вы можете повредить файл. - Джош Ли в комментариях.
источник
:%!xxd -r
вернуть его обратноПеребирает последний визуальный выбор.
источник
Иногда настройка в вашем .vimrc будет переопределена плагином или автокомандой. Для отладки этого полезного трюка является использование команды: verbose в сочетании с: set. Например, чтобы выяснить, где Cindent был установлен / не установлен:
Это выведет что-то вроде:
Это также работает с картами и бликами. (Спасибо joeytwiddle за указание на это.) Например:
источник
:verbose
также может использоваться доnmap l
илиhighlight Normal
для определения того, где последний раз была определенаl
карта клавиш илиNormal
выделение. Очень полезно для отладки!:%TOhtml
Создает HTML-рендеринг текущего файла.
источник
Не уверен, что это вообще считается темным углом, но я только что узнал об этом ...
восстановит (скопирует) все строки, содержащие "match", в регистр
"a
/@a
. (Использование заглавных букв в том,A
что vim добавляет янки вместо того, чтобы заменять предыдущее содержимое регистра.) В последнее время я часто использовал его при создании таблиц стилей Internet Explorer.источник
:v/PATTERN/d
Объяснение::v
является сокращением для:g!
, и:g
команда применяет любую команду ex к строкам.:y[ank]
работает и так делает:normal
, но здесь самое естественное, что нужно сделать, это просто:d[elete]
.:g/match/normal "Ayy
-normal
ключевое слово позволяет вам запускать команды в обычном режиме (с которыми вы, вероятно, более знакомы).Хотите посмотреть на свою историю команд?
Затем просмотрите, отредактируйте и, наконец, выполните команду.
Когда-нибудь вносить подобные изменения в два файла и переключаться между ними? (Скажите, исходный и заголовочный файлы?)
Затем переключайтесь между этими файлами.
источник
q:
все время случайно попал ...Vim откроет URL, например
Приятно, когда вам нужно подтянуть исходную страницу для справки.
источник
Макросы могут вызывать другие макросы, а также могут вызывать себя.
например:
... удалит первое слово из каждой строки до конца файла.
Это довольно простой пример, но он демонстрирует очень мощную функцию vim
источник
qqqqqifuu<Esc>h@qq@q
:normal! @a
текст, чтобы применить макрос к каждой строке в вашем выделении.Предполагая, что у вас скомпилирована поддержка Perl и / или Ruby,
:rubydo
и вы:perldo
будете запускать однострочник Ruby или Perl для каждой строки в диапазоне (по умолчанию - весь буфер) с$_
привязкой к тексту текущей строки (минус новая строка). Манипулирование$_
изменит текст этой строки.Вы можете использовать это, чтобы делать определенные вещи, которые легко сделать на языке сценариев, но не так очевидны при использовании встроенных функций Vim. Например, чтобы изменить порядок слов в строке:
Чтобы вставить случайную строку из 8 символов (AZ) в конце каждой строки:
Вы ограничены действиями по одной строке за раз, и вы не можете добавлять новые строки.
источник
pydo
иpy3do
работайте для python, если у вас есть необходимая поддержка, скомпилированная в.^ O и ^ I
Перейти к более старой / новой позиции. Когда вы перемещаетесь по файлу (путем поиска, перемещения команд и т. Д.), Vim запоминает эти «прыжки», поэтому вы можете повторять эти переходы назад (^ O - O для старых) и вперед (^ I - рядом с I на клавиатуре ). Я нахожу это очень полезным при написании кода и выполнении большого количества поисков.
солдат
Перейдите в положение, где режим вставки был остановлен последним. Я часто редактирую, а потом что-то ищу. Чтобы вернуться в место редактирования, нажмите gi.
гс
наведите курсор на имя файла (например, включите заголовочный файл), нажмите gf и файл откроется
Г.Ф.
похож на gf, но распознает формат "[имя файла]: [номер строки]". Нажатие gF откроет [имя файла] и установит курсор на [номер строки].
^ P и ^ N
Автозаполнение текста при редактировании (^ P - предыдущее совпадение и ^ N следующее совпадение)
^ X ^ L
Во время редактирования завершается на той же строке (полезно для программирования). Вы пишете код, а затем вспоминаете, что у вас есть тот же код где-то в файле. Просто нажмите ^ X ^ L и полная строка завершена
^ X ^ F
Полные имена файлов. Вы пишете "/ etc / pass" Хм. Вы забыли имя файла. Просто нажмите ^ X ^ F и имя файла будет завершено
^ Z или: sh
Переместить временно в оболочку. Если вам нужно быстрое избиение:
источник
^X^F
моим домашним животным мозоль является то , что имена файлов включают в себя=
признаки, делая это делать гнилые вещи во многих случаях (INI - файлы, файлы Makefile , и т.д.). Я использую,se isfname-==
чтобы положить конец этой неприятностиисточник
i10.0.0.1<Esc>Y254p$<C-v>}g<C-a>
Это хороший трюк, чтобы открыть текущий файл с другой кодировкой:
Полезно, когда вам нужно работать с устаревшими кодировками. Поддерживаемые кодировки перечислены в таблице под
encoding-values
(см.help
encoding-values
). Аналогичная вещь работает и для того++ff
, чтобы вы могли открыть файл в конце строки Windows / Unix, если вы ошиблись в первый раз (см.help
ff
).источник
Ввод == исправит отступ текущей строки на основе строки выше.
На самом деле, вы можете сделать один = знак, а затем любую команду движения. = {движение}
Например, вы можете использовать% движения, которое перемещается между соответствующими скобками. Поместите курсор на {в следующем коде:
И нажмите =%, чтобы мгновенно получить это:
С другой стороны, вы можете сделать = a { внутри блока кода, вместо того, чтобы позиционировать себя прямо на символе {.
источник
=}
илиvaBaB=
потому что это менее зависимым. Кроме того,v}}:!astyle -bj
лучше соответствует моему стилю кода, но я могу вернуть его в ваш стиль с помощью простого%!astyle -aj
gg=G
довольно аккуратно при вставке во что-то.ggVG=
.источник
ii
иjj
обычно используются для переменных счетчика, потому чтоi
иj
зарезервированы для комплексных чисел.Давайте посмотрим, какой симпатичный редактор IDE сделает транспонирование столбцов.
объяснение
\(
и\)
как запомнить вещи в регулярных выражениях. И\1
, и\2
т.д., как извлечь запоминающийся материал.Запомните все, за которым следует
^I
(вкладка), а затем все.Замените вышеприведенный материал на «2-й материал, который вы помнили», а затем «1-й материал, который вы помнили» - по сути, сделав транспонирование.
источник
Не совсем темный секрет, но мне нравится помещать следующее сопоставление в мой файл .vimrc, чтобы я мог в любое время нажать «-» (минус), чтобы открыть проводник, чтобы показать файлы рядом с тем, который я только что отредактировал . В проводнике файлов я могу нажать другое «-», чтобы переместиться вверх на один каталог, обеспечивая плавный просмотр сложных структур каталогов (подобных тем, которые используются в настоящее время инфраструктурами MVC):
Это может быть также полезно для кого-то. Мне нравится прокручивать экран и одновременно перемещать курсор:
Навигация по вкладкам - мне нравятся вкладки, и мне нужно легко перемещаться между ними:
Только в Mac OS X: Safari-подобная навигация по вкладкам:
источник
Мне нравится использовать sudo bash, и мой системный администратор ненавидит это. Он заблокировал «sudo», чтобы его можно было использовать только с несколькими командами (ls, chmod, chown, vi и т. Д.), Но я все равно смог использовать vim для получения оболочки root:
источник
Часто мне нравится изменять текущие каталоги во время редактирования - поэтому мне приходится меньше указывать пути.
источник
Я часто использую много окон, когда работаю над проектом, и иногда мне нужно изменить их размер. Вот что я использую:
Эти сопоставления позволяют увеличивать и уменьшать размер текущего окна. Это довольно просто, но это быстро.
источник
Не незаметная функция, но очень полезная и экономящая время.
Если вы хотите сохранить сеанс из ваших открытых буферов, вкладок, маркеров и других настроек, вы можете выполнить следующее:
Вы можете открыть сеанс, используя:
источник
:so session.vim
внутри Vim.вставляет вывод внешней команды в буфер.
Сделайте математику и получите результат прямо в тексте:
Получить список файлов для компиляции при написании Makefile:
Не ищите тот факт, который вы прочитали в википедии, вставьте его прямо в документ, который вы пишете:
источник
Карта F5, чтобы быстро ROT13 ваш буфер:
Вы можете использовать его в качестве ключа босса :).
источник
nmap i ggg?G``
. Или дьявольскоеnmap i ggg?G``i
!Я только что нашел это сегодня через NSFAQ :
Комментируйте блоки кода.
Войдите в блочный визуальный режим, нажав CTRL-V.
Отметьте блок, который вы хотите прокомментировать.
Нажмите I (заглавная I) и введите строку комментария в начале строки. (// для C ++)
Нажмите ESC, и все выбранные строки будут // добавлены к началу строки.
источник
git checkout
). Что касается лучшего использования для вставки блока, то здесь нет никаких каменных элементов. Вы просто используете его, когда у вас есть несколько строк, где вы хотите вставить одну и ту же последовательность символов в одном месте.Я использую vim практически для любого редактирования текста, поэтому я часто использую копирование и вставку. Проблема в том, что vim по умолчанию часто искажает импортированный текст с помощью вставки. Чтобы остановить это, используйте
перед вставкой в ваши данные. Это будет держать его от путаницы.
Обратите внимание, что вам придется выполнить команду
:set nopaste
для восстановления авто-отступа. Альтернативные способы вставки предварительно отформатированного текста - это регистры буфера обмена (*
и+
), и:r!cat
(вы должны закончить вставленный фрагмент с помощью ^ D).Также иногда полезно включить высококонтрастную цветовую схему. Это может быть сделано с
Я заметил, что он не работает на всех версиях vim, которые я использую, но работает на большинстве.
источник
set paste
или указание ключа для этогоpastetoggle
параметра является обычным способом обойти это, но тот же эффект может быть достигнут с помощью того,set mouse=a
что Vim знает, что поток текста, который он видит, представляет собой вставку, вызванную мышью."*p
чтобы вставить из X Xlipboard. (Он также работает с терминала vim, просто вам может понадобиться пакет gvim, если они разделены)*
этоPRIMARY
("средний щелчок") регистр. Буфер обмена является+