Тонкая настройка vim (делимся полезностями в .vimrc. Вопросы задавайте в отдельных темах!)

и другие vi-подобные редакторы

Модератор: /dev/random

HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Так вот, допустим вы пишите программу на С:

#include <stdlib.h*>

* - позиция курсора

Теперь когда вы нажимаете enter, вставляется новый инклюд:

#include <stdlib.h>
#include <*>

Или допустим html:
<ul>
<li>Кто здесь?*</li>
</ul>

После нажатия enter будет:
<ul>
<li>Кто здесь?</li>
<li>*</li>
</ul>

Такой возможности я нигде не видел, и поэтому написал для этого плагин :)
http://www.vim.org/scripts/script.php?script_id=1956
(Только не говорите что у меня плохой английский, я и так это знаю :) )

Значит копируете его в ~/.vim/plugiln В .vimrc пишите что-то вроде этого:

let g:smart_cr = {}
let g:smart_cr.html = [['<li>', '^\s*</li>', "<li>@@@</li>"]]
let g:smart_cr.c = [['^#include <', '^>$', "#include \<@@@>"],
\['^#include "', '^"$', "#include \"@@@\""]]

g:smart_cr это хэш. Ключ в этом хэше - это тип файла, значение - это список правил (которые тоже список :) ). Первый элемент - регулярное выражение для куска строки перед курсором в момент нажатия на enter, второй - регвыр для куска после курсора, третий - новая строка которую надо вставить.
@@@ - место куда поставить курсор в новой строке. Маркер можно поменять так:

let g:smart_cr_marker = 'here'

По моему вышло очень удобно :)
Спасибо сказали:
beholder
Сообщения: 29

Re: Тонкая настройка vim

Сообщение beholder »

HhyperR писал(а):
15.07.2007 16:06
Я заставил работать русскую раскладку в utf-8 вот этим (переключать надо ctrl+shift-6)

Shift можно не зажимать ;)
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Shift можно не зажимать ;)


Хех, действительно :) В хелпе написано ctrl-^, а я и не проверил ctrl-6
Спасибо сказали:
beholder
Сообщения: 29

Re: Тонкая настройка vim

Сообщение beholder »

xvadim писал(а):
13.07.2007 13:14
В gvim почему-то не работает Ctrl-n, Ctrl-p, а вставляются русские буквы т и з. Это как-то можно побороть? Или это глюк GTK?

Я собирал с lesstif и c gtk1 - работает. Насчёт gtk2 не знаю.
Спасибо сказали:
Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: Тонкая настройка vim

Сообщение Phobos »

Кстати это у всех при включении подсветки текущей строки (set cursorline) при перемотке некоторых файлов (например какой нить вимовский плагин) загрузка проца увеличивается чуть ли не до 100%? Как бороться?
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Выложил еще один плагин http://www.vim.org/scripts/script.php?script_id=1957 для автодополнения кусков кода. Например если ввести "for" и нажать таб, получиться:

for(@@@; @@@; @@@) {
@@@
}

Выделяется первый маркер и курсор устанавливается на него. Следующее нажатие <tab> сдвинет курсор к следующему маркеру. Если нечего дополнять или если не осталось неиспользованых маркеров, то <tab> работает как обычно. Пример моего файла с snippet'ами во вложении.

Phobos писал(а):
15.07.2007 23:15
Кстати это у всех при включении подсветки текущей строки (set cursorline) при перемотке некоторых файлов (например какой нить вимовский плагин) загрузка проца увеличивается чуть ли не до 100%? Как бороться?

У меня так же. А зачем оно в нормальном режиме? Лучше включать его в режиме вставки.
Вложения
snippets.tar.bz2
(1.26 КБ) 45 скачиваний
Спасибо сказали:
Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: Тонкая настройка vim

Сообщение Phobos »

HhyperR писал(а):
15.07.2007 23:32
У меня так же. А зачем оно в нормальном режиме? Лучше включать его в режиме вставки.


да хз, просто печалит сей баг...
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Это не баг, это особенность работы с терминалом. Насколько я понимаю терминал имеет функцию прокрутки текста, которая работает быстро. В случае подсветки строки приходится посылать на терминал весь экран.
Спасибо сказали:
Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: Тонкая настройка vim

Сообщение Phobos »

HhyperR писал(а):
16.07.2007 00:17
Это не баг, это особенность работы с терминалом. Насколько я понимаю терминал имеет функцию прокрутки текста, которая работает быстро. В случае подсветки строки приходится посылать на терминал весь экран.



аа, теперь понятно
Спасибо сказали:
Аватара пользователя
Kain666
Сообщения: 131
ОС: Archlinux

Re: Тонкая настройка vim

Сообщение Kain666 »

C недавних пор начал пользоваться плагином minibufexplorer.
Проблема в том, что когда я закрываю вим (q!) сначало закрывается окно minibufexplorer'a, а потом основное окно.
Можно ли сделать так, что бы закрывалось все сразу ?
PS:minibufexplorer у меня открыт постоянно.
PPS:И еще, можно ли по ctrl+tab переключаться между буферами? И например по ctrl+shift+tab между вкладками вима?
Archlinux <strike>ion3</strike>xmonad urxvt ncmpcpp emacs screen <strike>gajim</strike>qutim rtorrent
Спасибо сказали:
Аватара пользователя
pento
Сообщения: 403
ОС: Fedora 10

Re: Тонкая настройка vim

Сообщение pento »

Kain666 писал(а):
16.07.2007 19:54
что когда я закрываю вим (q!)


:qa!
?
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable
Контактная информация:

Re: Тонкая настройка vim

Сообщение Portnov »

1. :qa!
2. :map <C-Tab> :bn<CR>
3. :map <C-S-Tab> :tabnext<CR>

Только вот комбинации с Ctrl работают не во всех терминалах.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
Kain666
Сообщения: 131
ОС: Archlinux

Re: Тонкая настройка vim

Сообщение Kain666 »

Спасибо помогло.
С ctrl у меня рабоатет а вот с табом не хочет Изображение
Archlinux <strike>ion3</strike>xmonad urxvt ncmpcpp emacs screen <strike>gajim</strike>qutim rtorrent
Спасибо сказали:
Аватара пользователя
inline
Сообщения: 72
ОС: Gentoo

Re: Тонкая настройка vim

Сообщение inline »

inline писал(а):
12.07.2007 15:51
Поставил плагин tSkeleton, написал шаблоны. Только одно не нравится: есть, например, шаблон

Код: Выделить всё

/********************************************************************
 * <+FILE NAME+>                                                     *
 ...

и каждый раз, с различной длиной имени файла, звездочка справа съезжает неизвестно куда - приходится вручную поправлять. Подскажите, как сделать длину <+FILE NAME+> фиксированной (т.е. при необходимости дополняющейся пробелами)?

Оказывается, надо было использовать printf().
Вот мои шаблоны для C++:

Код: Выделить всё

/********************************************************************************
 * <+call:printf("%-77s", expand("%:t"))+>*
 * Copyright (C) <+call:strftime("%Y")+> <+call:printf("%-58s", g:tskelUserName)+>*
 *                                                                              *
 * This program is free software: you can redistribute it and/or modify         *
 * it under the terms of the GNU General Public License as published by         *
 * the Free Software Foundation, either version 3 of the License, or            *
 * (at your option) any later version.                                          *
 *                                                                              *
 * This program is distributed in the hope that it will be useful,              *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of               *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                *
 * GNU General Public License for more details.                                 *
 *                                                                              *
 * You should have received a copy of the GNU General Public License            *
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.        *
 ********************************************************************************/

#ifndef <+FILE NAME:u:s/\./_/+>
#define <+FILE NAME:u:s/\./_/+>

<+CURSOR+>

#endif // <+FILE NAME:u:s/\./_/+>

// vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent

Код: Выделить всё

/********************************************************************************
 * <+call:printf("%-77s", expand("%:t"))+>*
 * Copyright (C) <+call:strftime("%Y")+> <+call:printf("%-58s", g:tskelUserName)+>*
 *                                                                              *
 * This program is free software: you can redistribute it and/or modify         *
 * it under the terms of the GNU General Public License as published by         *
 * the Free Software Foundation, either version 3 of the License, or            *
 * (at your option) any later version.                                          *
 *                                                                              *
 * This program is distributed in the hope that it will be useful,              *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of               *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                *
 * GNU General Public License for more details.                                 *
 *                                                                              *
 * You should have received a copy of the GNU General Public License            *
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.        *
 ********************************************************************************/
<+call:eval('findfile(expand("%:r:t").".h", ".;") != "" ? "\n#include \"".findfile(expand("%:r:t").".h", ".;")."\"\n" : ""')+><+call:eval('findfile(expand("%:r:t").".h", ".;") != "" ? "<+CURSOR+>".GenImpl(findfile(expand("%:r:t").".h", ".;")) : "\n<+CURSOR+>\n"')+>
// vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent

Также написал плагин, генерирующий реализации для прототипов функций - http://www.vim.org/scripts/script.php?script_id=1960 . Он используется в последнем шаблоне. Допустим, у нас есть файл test.h:

Код: Выделить всё

#ifndef TEST_H
#define TEST_H
class Test
{
    public:
        Test(int val = 0);
         int getVal() const;
         void setVal(int val);
    private:
         int m_val;
};
#endif

При создании файла test.cpp в той же директории в него автоматически вставляются строки:

Код: Выделить всё

#include "test.h"

Test::Test(int val)
{

}

int Test::getVal() const
{

}

void Test::setVal(int val)
{

}

По-моему, удобно.
Спасибо сказали:
ganqqwerty
Сообщения: 18
ОС: Fedora 10, Ubuntu

Re: Тонкая настройка vim

Сообщение ganqqwerty »

Товарищи, здравствуйте! Не нашел в предыдущем материале одну функцию, которую считаю полезной и мощной. Как вызвать оболочку из vim, да не просто какой-то там ! с выведением странички, а полноценную такую оболочку в новом буфере (). Тогда Можно было бы:
* Подрубить к виму какой-нибудь браузер (ну, консольный) и читать QtAssistant (Ну или там html-версии msdn'a)
* не выходя из вима и не теряя из видимости свои буфера (гы-гы), ходить по системе Midnight commanderom
* и много чего еще
Спасибо сказали:
Аватара пользователя
pento
Сообщения: 403
ОС: Fedora 10

Re: Тонкая настройка vim

Сообщение pento »

Создал вот этот блог
Всё о Vim
Собственно, постарюсь писать туда, всё что будет находиться интересного :)
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

ganqqwerty писал(а):
18.07.2007 06:24
Товарищи, здравствуйте! Не нашел в предыдущем материале одну функцию, которую считаю полезной и мощной. Как вызвать оболочку из vim, да не просто какой-то там ! с выведением странички, а полноценную такую оболочку в новом буфере (). Тогда Можно было бы:
* Подрубить к виму какой-нибудь браузер (ну, консольный) и читать QtAssistant (Ну или там html-версии msdn'a)
* не выходя из вима и не теряя из видимости свои буфера (гы-гы), ходить по системе Midnight commanderom
* и много чего еще

Надо патчить vim. http://www.wana.at/vimshell/
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Вот еще один хороший плагин: http://www.vim.org/scripts/script.php?script_id=1676
Он может изменить слово под курсором по типу on -> off, true -> false
О чем-то таком тут уже писали, но это другой плагин с большими возможностями. Например он может менять monday -> tuesday -> wednesday, и т.д. по кругу. Или например if -> elseif -> else -> endif -> if -> ... Еще он может иметь для каждого типа файла свой словарь.

Кроме того, его еще можно расширять. Добавте в ~/.vimrc:

let g:toggle_words_dict = {'*': [['y', 'n'], ['enable', 'disable'], ['while', 'until'], ['if', 'unless']]}

'*' - это для всех типов файлов

Назначить сочетание для плагина так:

nmap <Leader>t :ToggleWord<CR>
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Еще один плагин: http://www.vim.org/scripts/script.php?script_id=1697
Плагин предназначен для работы с окружающими скобками, кавычками, тэгами и т.д. Например:

Нажмите cs"' (c,s,",') внутри строки:
"Hello world!"
что бы изменить её на
'Hello world!'
Теперь cs'<q>
<q>Hello world!</q>
Теперь назад cst"
"Hello world!"
Удалить кавычки: ds"
Hello world!
Теперь переместите курсор на слово Hello и нажмите ysiw]
[Hello] world!

Как это работает:
ds - удалить скобки; пример:
ds" - удалить кавычки
ds) - удалить круглые скобки
dst - удалить тэги

cs - заменить
cs)] - заменить круглые скобки на квадратные

ys - вставить скобки
ysiw) - вставить скобки вокруг слова, iw - стандартная команда vim (:help text-objects)
yss} - вставить фигурные скобки вокруг строки; yss - частный случай ys для работы над текущей строкой
Спасибо сказали:
Аватара пользователя
Dark_Savant
Бывший модератор
Сообщения: 1100
Статус: киборг
ОС: Cyborg OS 0.0.1.3

Re: Тонкая настройка vim

Сообщение Dark_Savant »

HhyperR писал(а):
18.07.2007 18:18
Плагин предназначен для работы с окружающими скобками, кавычками, тэгами и т.д. Например:

по-моему, совершенно бесполезный плагин. s/"/'/g итп нэ ?
I'm a tragic hero
In this game called life
My chances go to zero
But I always will survive
Спасибо сказали:
HhyperR
Сообщения: 12
ОС: Ubuntu Feisty

Re: Тонкая настройка vim

Сообщение HhyperR »

Dark_Savant писал(а):
18.07.2007 18:23
HhyperR писал(а):
18.07.2007 18:18
Плагин предназначен для работы с окружающими скобками, кавычками, тэгами и т.д. Например:

по-моему, совершенно бесполезный плагин. s/"/'/g итп нэ ?

Ну во первых :s/"/'/g набирать дольше чем cs"', во вторых :s изменит всю строку, например:
"string1", "multi-line
string"
Изменится на
'string1', 'multi-line
string"
В третих что бы добавить скобки вокруг строки надо написать что-то вроде этого
:s/\(.*\)/{\1}/
Я неговорю уже о том чтобы добавить скобки вокруг предложения или слова :)
А для тэгов это вообще убиться можно
Спасибо сказали:
ganqqwerty
Сообщения: 18
ОС: Fedora 10, Ubuntu

Re: Тонкая настройка vim

Сообщение ganqqwerty »

pento писал(а):
18.07.2007 09:55
Создал вот этот блог
Всё о Vim
Собственно, постарюсь писать туда, всё что будет находиться интересного :)

Могу отправить на блог большой ман из детерменированных пунктов. Типа "что я жду от хорошей IDE". Материал большой, поэтому тут выкладывать не хочется. Как отправлять?
Спасибо сказали:
Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: Тонкая настройка vim

Сообщение Phobos »

Кто нить пробовал подружить vim и haskell? В частности интересует hasktags и taglist, ну и другие советы
Спасибо сказали:
Аватара пользователя
pento
Сообщения: 403
ОС: Fedora 10

Re: Тонкая настройка vim

Сообщение pento »

ganqqwerty,
naplanetu@gmail.com
Спасибо сказали:
flyvint
Сообщения: 5
ОС: Linux(Gentoo)

Re: Тонкая настройка vim

Сообщение flyvint »

Dark_Savant писал(а):
17.07.2006 12:18
запустить этот самый kde terminal, в нем vim ~/.vimrc
набираем map ^Vтребуемая_комбинация требуемое_действие, аналогично для imap, vmap.

ежели ты пр konsole, то нада в менюхе выбрать настройка->клавиатура->xterm(xfree 4.x.x)
Спасибо сказали:
Аватара пользователя
pento
Сообщения: 403
ОС: Fedora 10

Re: Тонкая настройка vim

Сообщение pento »

Phobos,
Ну вот по крайней мере что нашёл гугль,

Vim as a Haskell IDE, first steps
http://www.cs.kent.ac.uk/people/staff/cr3/...ll/Vim/vim.html
Спасибо сказали:
Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: Тонкая настройка vim

Сообщение Phobos »

pento писал(а):
20.07.2007 19:15
Phobos,
Ну вот по крайней мере что нашёл гугль,

Vim as a Haskell IDE, first steps
http://www.cs.kent.ac.uk/people/staff/cr3/...ll/Vim/vim.html


эт я тоже находил, мне собственно более интересно как научить taglist работать с hasktags...

ps на за ссылку все равно спасибо :)
Спасибо сказали:
Аватара пользователя
Blacky
Сообщения: 30
ОС: Suse + Ubuntu

Re: Тонкая настройка vim

Сообщение Blacky »

Люди, простите за глупый вопрос: "А что такое vim?" и где его запустить? ... недавно я тута :blush:
Mandriva 2007
Спасибо сказали:
Аватара пользователя
Dark_Savant
Бывший модератор
Сообщения: 1100
Статус: киборг
ОС: Cyborg OS 0.0.1.3

Re: Тонкая настройка vim

Сообщение Dark_Savant »

Blacky писал(а):
21.07.2007 21:13
Люди, простите за глупый вопрос: "А что такое vim?" и где его запустить? ... недавно я тута

а тему почитать, а в гугеле набрать ?
I'm a tragic hero
In this game called life
My chances go to zero
But I always will survive
Спасибо сказали:
ganqqwerty
Сообщения: 18
ОС: Fedora 10, Ubuntu

Re: Тонкая настройка vim

Сообщение ganqqwerty »

Серия вопросов:
1. Подсветка ошибок при компиляции - как в колор-gcc
3. Возможно ли сделать настоящую карту классов и их членов (как например в Вижуале) - с помощью taglist?
Вопрос отпал после прочтения ctags --help - раньше не мог додуматься, что члены-данные класса логично назвать буквой m
4. Кто пробовал прикручивать к vim переводчик (словарик я имею ввиду)? Например, по рецепту из Википедии. У меня их совет не сработал. Еще круче, если можно будет открывать перевод в новом сплите (буфере) для слова под курсором.
5. Переход к файлу под курсором когда этот самый файл - хреньк в кавычках, объявленная в моем Makefile. Шараханье по функциям и членам данных объявленных в таком файле, не прибегая к явному открытию файла. Омни и ctrl+n дополнения по данным из таких файлов
6. Плагин minibufferExplorer - как сделать, чтобы закрытые буферы там не высвечивались? Или хотя бы передвигались в конец списка? Или может есть лучшие плагины для буферов?
7. Тo Inline: а как сделать чтобы болванки для реализации добавлялись на ходу? По комбинации клавиш, например. А если h и cpp файлы обычно лежат разных директориях ./src и ./inc ?
8. Vim и mc - если открывать с помощью vimа файлы, при этом находясь в mc, то возникают проблемы с Ctrl+O
Спасибо большое заранее!.
9. Патч vimshell - кто-нибудь нашел ему достойное применение?
Спасибо сказали:
Ответить