Иногда в виме окно оказывается замусоренным. Может помочь скроллинг вверх/вниз, но это не всегдая удобно. Более удобный способ - вызвать принудительную перерисовку:
:redr!
Читать дальше......
Иногда в виме окно оказывается замусоренным. Может помочь скроллинг вверх/вниз, но это не всегдая удобно. Более удобный способ - вызвать принудительную перерисовку:
:redr!
Вроде научился делать кат.
Инфу взял отсюда http://seorussian.blogspot.com/2008/12/sdelat-kat-v-blogger-odin-iz-luchshih.html
[updated] Нашёл официальные каты.
Мне приходится время от времени постить исходные коды. Нужно, чтобы они имели подсветку - поэтому без html не обойтись. К счастью, vim умеет генерировать html версию редактируемого файла, для этого нужно набрать
:TOhtml
Эта команда работает с диапазоном строк, поэтому ее можно использовать и для переконвертирования участка файла (в данном случае от строки 10 до строки 20):
:10,20TOhtml
или, чтобы не запоминать номера строк, после выделения диапазона (Shift+v) можно набрать
:'<,'>TOhtml
В результате получаем абсолютно то же самое, что мы видим у себя в редакторе:
// TEntity//{{{
// Базовый класс для всех классов в программе
//
//
TEntity = class
private
FOwner: TEntity;
FGrabber: Boolean;
FHash: Cardinal;
protected
FName: String;
public
Constructor Create(Owner: TEntity); virtual;
Destructor Destroy; override;
Procedure DoString(S: String); virtual;
Procedure AssignVar(Name, Value: String); virtual;
Procedure Render; virtual;
Procedure Update; virtual;
Procedure Kill; virtual;
Procedure OnEvent(Event: TEvent); virtual;
Procedure SendEvent(Event: TEvent); virtual;
Procedure SendEventAndFree(Event: TEvent);
Property Grabber: Boolean read FGrabber;
Property Owner: TEntity read FOwner;
Property Hash: Cardinal read FHash;
Property Name: String read FName;
end;
//}}}
И не забудьте про :help TOhtml
Не секрет, что во free pascal'е существует возможность перегрузки стандартных операторов. В документации говорится, что есть три типа таких операторов:
1) Арифметические бинарные (+, *, <>, /, **) - любая функция от двух параметров.
2) Операции сравнения (<, >, =, <=, >=) - функция от двух переменных, возвращающая Boolean, причем <> будет сгенерирован автоматически как отрицание к =.
3) Оператор присваивания (:=) - функция принимающая значение одного типа и возвращающая значение другого типа.
Работает это примерно так
Type
TVec3D = Array[0..2] Of Double;
// Скалярное произведение
operator * (A, B: TVec3D) Result: Double;
Var
I: Integer;
begin
Result := 0;
for I := 0 to 2 do
Result += A[I] * B[I];
end;
// Угол от A к B в плоскости XY по часовой?
operator > (A, B: TVec3D) Result: Boolean;
begin
Result := A[0]*B[1] - A[1]*B[0] >= 0;
end;
// Присвоение числа в вектор
operator := (V: Integer) Result: TVec3D;
Var
I: Integer;
begin
for I := 0 to 2 do
Result[I] := V;
end;
Однако, если покапаться в исходниках free pascal'я (я экспериментировал с 2.2.2, в более поздних версиях что-то может быть не так), то можно обнаружить, что перегрузке поддаются еще и операторы
1) Арифметические ><, or, and, div, mod, shl, shr, xor.
2) Унарные -, not.
Оператор >< в самом языке используется для нахождения симметрической разности двух множеств. Т.е. код
Var
I: Integer;
S: Set Of Byte;
...
S := [1, 2, 3, 4, 5] >< [3, 4, 5, 6, 7];
for I := 1 to 7 do
Write(Ord(I in S));
Writeln;
напечатает 1100011, а в переменной S будет [1, 2, 6, 7].
Его очень удобно использовать для обозначения векторного произведения (чем, кстати и воспользовались разработчики free pascal'я в своем модуле matrix).
mod очень кстати заюзать для создания собственного удобного нахождения остатков.
Согласно комментариям в модуле tockens исходников компилятора перегрузке должны поддаваться еще и as, in, is. Однако, у меня этого сделать почему-то не вышло, наверно к ним нужен какой-то особый подход. Никто не знает какой именно? :)
В виме можно в одном окне открыть несколько файлов на разные табы. Делается это просто:
:tabe [FILENAME]
Переключение между табами - gt и gT. Рекомендую назначить эти команды на стрелочки влево и вправо (в обычном режиме вы ведь используете h/l, не так ли?):
:map <LEFT> gT
:map <RIGHT> gT
Итак, у вас проект с несколькими модулями, вы их все открыли и успешно работаете. При каждом заходе в проект не хочется по новому открывать все файлы. Чтобы сохранить текущую конфигурацию достаточно выполнить команду
:mksession MySession.vim
Тогда, чтобы потом снова открыть вкладки достаточно запустить вим так
gvim -S MySession.vim
Для выполнения одной и той же команды на всех табах используется команда :tabdo, К примеру, сохранить открытые файлы
:tabdo w
закрыть все табы
:tabdo q
И кстати, не забудьте про :help tabpage.
Иногда, например при работе с файлами или написании низкоуровнего сетевого когда, может потребоваться работа с битами. Она без проблем реализуется с помощью побитовых операторов (and, not, shl, or), но хотелось бы более изящного решения.
По умолчанию конструкция вида
TBits = packed record
Carry: Boolean;
Signed: Boolean;
Zero: Boolean;
end;
займет 3 байта. А если сверху прописать опцию
{$BITPACKING ON}
Многих раздражает розовый цвет окошка автодополнения (то самое, которое по Ctrl-n вызывается). Самый простой способ это исправить - прописать в _vimrc такие строки:
function KillPink()
hi Pmenu guibg=#2e3436 guifg=#eeeeec
hi PmenuSel guibg=#8c8c8c guifg=#8c2426
hi PmenuSbar guibg=#555753
hi PmenuThumb guifg=#ffffff
endfunction
call KillPink()
Цвета можно переписать под собственный вкус. Если вы сменяете цветовую схему, то эта настройка будет сбита. Тогда нужно будет выполнить команду
:call KillPink()
По умолчанию для автодополнения вим ищет слова только в текущем буфере. Часто этого недостаточно. Хотелось бы заранее обладать каким-то базовым комплектом слов (типа implementation).
Для этого создаем какой-нибудь файл, к примеру, C:\PascalKeywords.vim и в нем прописываем все необходимые слова:
interface
implementation
initialization
finalization
inherited
davidblain
И добавляем в _vimrc такую строчку:
set cpt=.,w,b,u,t,i,kC:\PascalKeywords.vim
Так же можно добавить и другие необходимые файлы, просто приписав ",k[Путь к файлу]".
Полный список зарегестрированных слов можно найти тут.