2012-12-18 4 views
7

Для моих программ Haskell я знаю, что имя исполняемого файла в пути совпадает с именем моего текущего каталога. Теперь я хочу, чтобы создать отображение следующим образом:Использовать текущий каталог в командах Vim

:map <leader>rr :!curdir()<cr> 

Однако, единственная команда, которую я знаю, это getcwd(), что дает мне весь путь вместо имени просто каталога.

Есть ли простой способ извлечь только имя каталога?

+0

См. [Этот ответ] (http://stackoverflow.com/a/13908273/546861). – romainl

+0

Ответы ниже - хорошие решения vimscript. Если у вас нет карты, вы также можете оценить ее динамически с помощью = register. (после ввода части команды ex, например ':!' type 'CR =', за которой следует один из приведенных ниже vimscript-решений. – darcyparker

+0

@darcyparker. Ни то, ни другое. Не используйте какие-либо регулярные выражения для такой работы, функция для этого. Любой, предполагающий, что '/' является разделителем путей, ошибочен. Любой, кто предполагает, что '/' и '\' - это * оба разделителя пути так же ошибочны. Более того, любой, предполагающий '\' всегда * * разделитель путей на windows также неверно. Я также не знаю, в каких обстоятельствах разделитель путей будет ':', но может быть и так. Большинство систем \ * nix могут иметь имена '\' и ':' в именах файлов. – ZyX

ответ

13

Использование

fnamemodify(getcwd(), ':t') 

или

fnamemodify('.', ':p:h:t') 

. :h во втором случае необходимо, потому что :p испускает разделитель трейлинг-тракта (таким образом, последний компонент пути, выбранный :t, теперь является пустой строкой).

Чтобы переместить это в вашем использовании картографической

:noremap \rr :!<C-r>=shellescape(fnamemodify('.', ':p:h:t'), 1)<CR><CR> 

. Описание того, почему вы никогда не должны использовать :map, см. here.

0

Вы могли бы использовать что-то вроде:

split(getcwd(), "/")[-1] 
+0

Разделитель путей не необходимая '/'. – ZyX

+0

@ZyX, о какой операционной системе вы говорите? – taro

+0

Windows: здесь разделитель путей либо '\', либо '/' в зависимости от опции 'и shellslash'. AFAIK Macintosh иногда, здесь разделитель путей может быть': ', но я не знаю, в каких случаях. – ZyX

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