Как уже упоминалось уже несколько людей, для Apple - лучшее место для запуска.
Одна полезная ссылка, о которой я еще не упоминал, - Практическое управление памятью . Вы найдете его в середине документов Apple, если прочитаете их, но это стоит прямой ссылки. Это блестящее резюме правил управления памятью с примерами и распространенными ошибками (в основном, какие другие ответы здесь пытаются объяснить, но не так).
Не мог бы быть тот, о котором не знают 99% пользователей Vim, но это - что-то, что я ежедневно использую и что любой Linux+Vim poweruser должен знать.
Основная команда, все же чрезвычайно полезная.
:w !sudo tee %
Я часто забываю к sudo прежде, чем отредактировать файл, на котором у меня нет полномочий записи. Когда я приезжаю, чтобы сохранить тот файл и получить ошибку разрешения, я просто даю ту команду энергии, чтобы сохранить файл без потребности сохранить его во временный файл и затем скопировать его назад снова.
Очевидно, необходимо быть в системе с установленным sudo и иметь sudo права.
Это - хороший прием для повторного открытия текущего файла с другим кодированием:
:e ++enc=cp1250 %:p
Полезный, когда необходимо работать с кодировкой прежней версии. Поддерживаемая кодировка перечислена в таблице под encoding-values
(см. help
encoding-values
). Подобная вещь также работает на ++ff
, так, чтобы можно было вновь открыть файл с концами строки Windows/Unix, если Вы понимаете его превратно впервые (см. help
ff
).
Принятию Вас скомпилировали Perl и/или поддержку Ruby в, :rubydo
и :perldo
выполнит Ruby или остроту Perl на каждой строке в диапазоне (значения по умолчанию ко всему буферу), с $_
связанный с текстом текущей строки (минус новая строка). Управление $_
изменит текст той строки.
Можно использовать это, чтобы сделать определенные вещи, которые легко сделать в языке сценариев, но не так очевидный Vim использования builtins. Например, инвертировать порядок слов в строке:
:perldo $_ = join ' ', reverse split
Вставить случайную строку 8 символов (A-Z) в конце каждой строки:
:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[rand 26]}.join
Вы ограничены действием на одну строку за один раз, и Вы не можете добавить новые строки.
Хотите посмотреть свою историю команд?
q:
Затем просмотрите, отредактируйте и, наконец, выполните команду.
Когда-нибудь вносить подобные изменения в два файла и переключаться между ними? (Скажите, файлы источника и заголовка?)
:set hidden
:map <TAB> :e#<CR>
Затем переходите туда-сюда между этими файлами.
Не уверен, считается ли это вообще темным углом, но я только что узнал об этом ... .
:g/match/y A
восстановит (скопирует) все строки, содержащие «match», в регистр a
/ @a
(заглавная буква A
делает vim добавьте янки вместо замены предыдущего содержимого регистра.) В последнее время я часто использовал его при создании таблиц стилей Internet Explorer.
:%!xxd
Превратите энергию в Hex-редактор.
:%!xxd -r
Вернуться.
Предупреждение: Если Вы не редактируете с двоичным файлом (-b), Вы могли бы повредить файл. – Josh Lee в комментариях.
Не точно неясный, но существуют, несколько "удаляют в" командах, которые чрезвычайно полезны, как..
diw
удалить текущее словоdi(
удалить в текущем parensdi"
удалить текст между кавычкамиДругие могут быть найдены на :help text-objects
:! [команда]
выполняет внешнюю команду, пока вы находитесь в Vim.
Но добавьте точку после двоеточия, :.! [команда]
, и она выведет вывод команды в ваше текущее окно. Это : !
Например:
:.! ls
Я часто использую это для таких вещей, как добавление текущей даты в набираемый документ:
:.! date
Что-то я просто недавно обнаружил, что думал, было очень прохладно:
:earlier 15m
Возвращается документ назад тому, как это было 15 минут назад. Может взять различные аргументы в пользу количества времени, которое Вы хотите откатывать, и зависит от undolevels. Может быть инвертирован с противоположной командой :later
Я часто использую много окон, когда я работаю над проектом, и иногда я должен изменить размер их. Вот то, что я использую:
map + <C-W>+
map - <C-W>-
Эти отображения позволяют увеличивать и уменьшать размер текущего окна. Это довольно просто, но это быстро.
Часто, мне нравится изменять текущие каталоги при редактировании - таким образом, я должен указать пути меньше.
cd %:h
Not exactly a dark secret, but I like to put the following mapping into my .vimrc file, so I can hit "-" (minus) anytime to open the file explorer to show files adjacent to the one I just edit. In the file explorer, I can hit another "-" to move up one directory, providing seamless browsing of a complex directory structures (like the ones used by the MVC frameworks nowadays):
map - :Explore<cr>
These may be also useful for somebody. I like to scroll the screen and advance the cursor at the same time:
map <c-j> j<c-e>
map <c-k> k<c-y>
Tab navigation - I love tabs and I need to move easily between them:
map <c-l> :tabnext<enter>
map <c-h> :tabprevious<enter>
Only on Mac OS X: Safari-like tab navigation:
map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>
Давайте посмотрим, что некоторый симпатичный маленький редактор IDE делает перемещение столбца.
:%s/\(.*\)^I\(.*\)/\2^I\1/
Объяснение
\(
и \)
то, как помнить материал на regex-земле. И \1
, \2
и т.д. то, как получить помнивший материал.
>>> \(.*\)^I\(.*\)
Помните все сопровождаемое ^I
(вкладка) сопровождается всем.
>>> \2^I\1
Замените вышеупомянутый материал "2-м материалом, который Вы помнили" сопровождаемый "1-м материалом, который Вы помнили" - по существу выполнение транспонирования.
Иногда настройка в вашем .vimrc будет переопределена плагином или автокомандой. Для отладки этого полезного трюка является использование команды: verbose в сочетании с: set. Например, чтобы выяснить, где Cindent получил установлен / не установлен:
:verbose set cindent?
Это выведет что-то вроде:
cindent
Last set from /usr/share/vim/vim71/indent/c.vim
Это также работает с картами и бликами. (Спасибо joeytwiddle за указание на это.) Например:
:verbose nmap U
n U <C-R>
Last set from ~/.vimrc
:verbose highlight Normal
Normal xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
Last set from ~/src/vim-holodark/colors/holodark.vim
de Удалить все до конца слова, нажав. по желанию вашего сердца.
ci (xyz [Esc] - Это странное. Здесь 'i' не означает режим вставки. Вместо этого он означает внутри скобок. Таким образом, эта последовательность вырезает текст в круглых скобках вы стоите и заменяете его на «xyz». Он также работает внутри квадратных и фигурных скобок - просто сделайте ci [или ci {соответственно. Естественно, вы можете сделать di (если вы просто хотите удалить весь текст без введите что-нибудь. Вы также можете сделать a
вместо i
, если вы хотите удалить также скобки, а не только текст внутри них.
ci " - вырезает текст в текущих кавычках
ciw - вырезает текущее слово. Ctrl + Y и Ctrl + E прокручивают вниз или вверх по одной строке за раз.
Сумасшедшая, но очень полезная команда - это zz - она прокручивает экран, чтобы эта строка появилась посередине. Это отлично подходит для помещения фрагмента кода, над которым вы работаете, в центр вашего внимания. Сестринские команды - zt и zb - делают эту строку верхней или нижней на экране, что не так полезно.
% находит и переходит к соответствующей круглой скобке.
de - удалить от курсора до конца слова (вы можете также сделать dE
, чтобы удалить до следующего пробела)
bde - удалить текущее слово, слева направо, разделитель
df [пробел] - удалять до следующего пробела включительно
dt. - удалять до следующей точки
dd - удалять всю эту строку
ye (или yE) - переносить текст отсюда до конца слова
ce - прорезает конец слова
пока - копирует текущее слово (меня интересует, что делает «привет»!)
уу - копирует текущую строку
cc - обрезает текущую строку, вместо этого вы можете сделать S
. Также есть нижний предел s
, который обрезает текущий символ и переключается в режим вставки.
viwy или viwc . Снять или изменить текущее слово. Нажмите w
несколько раз, чтобы выбрать каждое последующее слово, используйте b
для перемещения назад
vi { - выделите весь текст в квадратных скобках.
Я использую vim практически для любого редактирования текста, поэтому часто использую функции копирования и вставки. Проблема в том, что vim по умолчанию часто искажает импортированный текст с помощью вставки. Чтобы остановить это, используйте
:set paste
перед вставкой ваших данных. Это предотвратит появление ошибок.
Обратите внимание, что вам придется выполнить команду : установите nopaste
для восстановления автоиндентирования. Альтернативными способами вставки предварительно отформатированного текста являются регистры буфера обмена ( *
и +
) и : r! Cat
(вам придется завершить вставленный фрагмент с ^ D).
Иногда полезно включить высококонтрастную цветовую схему. Это можно сделать с помощью
:color blue
. Я заметил, что он работает не на всех версиях vim, которые я использую, а на большинстве.
:r! <command>
вставляет вывод внешней команды в буфер.
Выполните некоторые вычисления и получите результат прямо в тексте:
:r! echo $((3 + 5 + 8))
Получите список файлов для компиляции при записи Makefile :
:r! ls *.c
Не ищите тот факт, который вы читаете в Википедии, просто вставьте его прямо в документ, который вы пишете:
:r! lynx -dump http://en.wikipedia.org/wiki/Whatever
I just found this one today via NSFAQ:
Comment blocks of code.
Enter Blockwise Visual mode by hitting CTRL-V.
Mark the block you wish to comment.
Hit I (capital I) and enter your comment string at the beginning of the line. (// for C++)
Hit ESC and all lines selected will have // prepended to the front of the line.
Тот, который я редко нахожу в большинстве руководств по Vim, но он НЕВЕРОЯТНО полезен (по крайней мере, для меня), это
g; и g,
для перемещения (вперед, назад) по списку изменений.
Позвольте мне показать, как я его использую. Иногда мне нужно скопировать и вставить фрагмент кода или строку, скажем, шестнадцатеричный цветовой код в файл CSS, поэтому я ищу, прыгаю (не заботясь о том, где находится совпадение), копирую его, а затем возвращаюсь (g;) туда, где Я редактировал код, чтобы наконец вставить его. Не нужно создавать отметки. Проще.
Только мои 2 цента.
Мне нравится использовать sudo bash, а моему системному администратору это не нравится. Он заблокировал sudo, поэтому его можно было использовать только с несколькими командами (ls, chmod, chown, vi и т. Д.), Но я все равно смог использовать vim для получения оболочки root:
bash$ sudo vi +'silent !bash' +q
Password: ******
root#
Сопоставьте F5 для быстрого ROT13 вашего буфера:
map <F5> ggg?G``
Вы можете использовать его как ключ босса :).
^ O и ^ I
Перейти к старому / новому положению. Когда вы перемещаетесь по файлу (путем поиска, перемещения команд и т. Д.) Vim запоминает эти «прыжки», чтобы вы могли повторять эти прыжки назад (^ O - O для старого) и вперед (^ I - рядом с I на клавиатуре. ). Я считаю это очень полезным при написании кода и выполнении большого количества поисков.
gi
Перейти в позицию, где режим вставки был остановлен последним. Я часто редактирую, а потом что-то ищу. Чтобы вернуться к месту редактирования, нажмите gi.
gf
поместите курсор на имя файла (например, включить файл заголовка), нажмите gf, и файл откроется
gF
аналогично gf, но распознает формат "[файл имя]: [номер строки] ". Нажатие gF откроет [имя файла] и установит курсор на [номер строки].
^ P и ^ N
Автозаполнение текста при редактировании (^ P - предыдущее совпадение и ^ N следующее совпадение)
^ X ^ L
При редактировании завершается в той же строке (полезно для программирования). Вы пишете код, а затем вспоминаете, что у вас есть тот же код где-то в файле. Просто нажмите ^ X ^ L, и вся строка будет заполнена
^ X ^ F
Полные имена файлов. Вы пишете "/ etc / pass" Хм. Вы забыли имя файла. Просто нажмите ^ X ^ F, и имя файла будет завершено
^ Z или: sh
Временное перемещение в оболочку. Если вам нужен быстрый удар:
" insert range ip's
"
" ( O O )
" =======oOO=(_)==OOo======
:for i in range(1,255) | .put='10.0.0.'.i | endfor
Macros can call other macros, and can also call itself.
eg:
qq0dwj@qq@q
...will delete the first word from every line until the end of the file.
This is quite a simple example but it demonstrates a very powerful feature of vim
Ввод == исправит отступ текущей строки на основе строки выше.
Фактически, вы можете сделать один знак =, за которым следует любая команда движения. = {движение}
Например, вы можете использовать% движение, которое перемещается между соответствующими фигурными скобками. Поместите курсор на {в следующем коде:
if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}
И нажмите =% , чтобы сразу получить это:
if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}
В качестве альтернативы вы можете сделать = a { в блоке кода вместо того, чтобы позиционировать себя прямо на персонаже {.
Put this in your .vimrc to have a command to pretty-print xml:
function FormatXml()
%s:\(\S\)\(<[^/]\)\|\(>\)\(</\):\1\3\r\2\4:g
set filetype=xml
normal gg=G
endfunction
command FormatXml :call FormatXml()
Введите символ из его шестнадцатеричного значения (режим вставки):
<C-Q>x[type the hexadecimal byte]
% также хорош, если вы хотите разнести файлы между двумя разными копиями проекта, не изнашив мизинцы (из корень проекта 1):
:vert diffs /project2/root/%