2016-09-26 2 views
1

Я в классе информатики, который требует, чтобы Lisp взгляд стиль, как это:Force Vim для выравнивания Params в Лиспе

(define append (as bs) 
    (if (null? as) 
     bs 
     (cons (car as) 
      (append (cdr as) bs)))) 

вместо так:

(define append (as bs) 
    (if (null? as) 
    bs 
    (cons (car as) 
      (append (cdr as) bs)))) 

А именно, если ветви должны быть выровнены. Есть ли способ заставить Vim сделать это?

+0

Не очень полезно, если вы действительно хотите использовать vim, но пример, который вы дали, отформатирован так, как вы хотите, в режиме схемы Emacs (с настройкой по умолчанию). – coredump

+0

https://www.reddit.com/r/programming/comments/1cij7/ask_reddit_best_way_to_edit_scheme_in_vim/ – coredump

+0

http://stackoverflow.com/q/5352997/124319 – coredump

ответ

1

Если вы хотите Lisp режима Vim для лечения всех форм как вызовы функций, так что элементы выражения многострочного выравнивания со вторым элементом, то просто снимите lispwords параметр:

:set lispwords= 

Вашего exmaple , вам кажется, что требуется раскол define для обработки с отступом, а не с выравниванием. Выяснить множество форм, для которых вы хотите отступы, а не выравнивая поведение и положить, что точный набор в ваш lispwords:

:set lispwords=define[,... whatever other symbols] 

Это может быть сделано на основе типа файла с авто-загруженным. В файле .vimrc вы можете иметь:

:au BufRead,BufNewFile *.scm set lispwords=define 

После ввода, что в моем .vimrc временно, если я редактировать новый файл:

$ vim foo.scm 

, а затем вставить несколько строк, они получают автоматически отформатирован как thisL

(define fun() 
    (if foo 
     (then ...) 
     (else ...) 
~ 
~ 
~ 
:q! 

Я просто нажал Enter; автоиндексирование началось. Конфигурация Vim уже ассоциирует файлы .scm с Схемой и устанавливает режим Лиспа. Команда au настраивает это, переопределяя lispwords.

Смежные вопросы