2015-02-23 7 views
0

Я переключился с intelliJ на VIM несколько дней назад, и у меня есть несколько проблем с подсветкой синтаксиса. Я в основном работаю с php и html, а в некоторых файлах некоторые из ; отмечены красным фоном (может быть, это означает, что в моем синтаксисе есть ошибка?). Это наиболее вероятно, когда ; следует комментарию //. Я уверен, что ошибок нет ...VIM синтаксис подсветки 'buggy'?

Кроме того, несколько файлов не выделяют подсветку синтаксиса php, после того как blockcomment /**/ до тех пор, пока тег php ?> не будет закрыт.

Любая идея, что им не хватает? Также я был бы признателен за предложения по альтернативам подсветки синтаксиса. Трудно найти полезный материал для webdev, так как VIM не так популярен в этом секторе, я думаю.

Вот мои текущие настройки VIM: https://github.com/raQai/.vim

Я ценю вашу помощь

Edit:

Вот код Thats вызывает проблемы:

<?php namespace KF\LINKS; 

defined ('ABSPATH') or die ('nope!'); 

/** 
* Plugin Name: KF Attachment Links 
* Description: Adding attatchemts to post, pages and teams (Kong Foos Team Manager) 
* Version: 1.0.0 
* Author: Patrick Bogdan 
* Text Domain: kfl 
* License: GPL2 
* 
* Copyright 2015 Patrick Bogdan 
* TODO: Settings for post_types with checkboxes 
*/ 

new KFLinksMetaBox(); 

class KFLinksMetaBox { 
    const kfl_key = 'kf-links-information'; 

    function __construct() { 
     if (is_admin()) { 
      add_action ('admin_enqueue_scripts', wp_enqueue_style ('kfl-admin-style', plugins_url('includes/css/admin-styles.css', plugin_basename(__FILE__)))); 
      add_action ('admin_enqueue_scripts', wp_enqueue_script ('kfl-admin-js', plugins_url('includes/js/kfl-admin-scripts.js', plugin_basename(__FILE__)))); 

      add_action ('add_meta_boxes', array(&$this, 'kf_links_meta_box_add')); 
      add_action ('save_post', array(&$this, 'kf_links_meta_box_save')); 
     } 

     register_deactivation_hook(__FILE__, array(&$this, 'kf_links_uninstall')); 

     add_filter('the_content', array($this, 'kf_links_add_to_posts')); 
    } 

    function kf_links_uninstall() { 
     delete_post_meta_by_key(self::kfl_key); 
    } 

    function kf_links_add_to_posts($content) { 
     $links = $this->kf_links_explode(get_post_meta(get_the_ID(), self::kfl_key, true)); 
     if ($links['is_active'] == '1' && count($links['items']) > 0) { 
      $links_html = ''; 
      if (!empty($links['title'])) { 
       $links_html .= '<strong>' . $links['title'] . '</strong>'; 
      } 
      foreach ($links['items'] as $link) { 
       if (!empty($link['name']) && !empty($link['url'])) { 
        $links_html .= '<br /><a href="' . $link['url'] . '">&raquo; ' . $link['name'] . '</a>'; 
       } 
      } 
      if (!empty($links_html)) { 
       $content .= '<p class="attachment-links">' . $links_html . '</p>'; 
      } 
     } 
     return $content; 
    } 

    function kf_links_meta_box_add() { 
     $screens = array('post', 'page', 'teams'); 

     foreach($screens as $screen) 
     { 
      add_meta_box (
       'kf_links_meta_box', // id 
       'Linksammlung', // title 
       array(&$this, 'kf_links_meta_box_display'), // callback 
       $screen, // post_type 
       'normal', // context 
       'high' // priority 
      ); 
     } 
    } 

    function kf_links_meta_box_display($post) { 
     wp_nonce_field('kf_links_meta_box', 'kf_links_meta_box_nonce'); 
     $this->kf_links_meta_box_display_html($post); 
    } 

    function kf_links_meta_box_display_html($post) 
    { 
     $post_string = get_post_meta($post->ID, self::kfl_key, true); 
     $links = $this->kf_links_explode($post_string); 

     ?> 
     <div class="kf-meta-box-checkbox"> 
      <input onClick="kfl_checkboxDivDisplay(this.id, 'kf-links'); kfl_creaetLinksString();" <?php if ($links['is_active']) echo 'checked '; ?>type="checkbox" id="kf-links-checkbox" value="1" /> 
      <label id="kf-links-checkbox-label" for="kf-links-checkbox">Linksammlung aktivieren</label> 
     </div> 
     <div id="kf-links" <?php if (!$links['is_active']) echo 'style="display:none" '; ?>> 
      <div class="kf-meta-box-full"> 
       <label for="kf-links-title">Titel der Linksammlung</label> 
       <input onChange="kfl_creaetLinksString()" id="kf-links-title" value="<?php echo $links['title']; ?>" placeholder="Titel der Linksammlung" /> 
      </div> 
      <div class="kf-links-header"> 
       <label>Name</label> 
       <label>URL</label> 
      </div> 
      <div id="kf-links-items"> 
       <?php 
       foreach ($links['items'] as $ID => $arr) { 
        $this->kf_links_item_display_html($ID, $arr, $links['is_active']); 
       } 
       if (count($links['items']) < 1) { 
        $this->kf_links_item_display_html(0, array('name' => '', 'url' => ''), false); 
       } 
       ?> 
      </div> 
      <h4><a href="#kf-link-add" onClick="kfl_createLinkItem()">+ Weiteren Link hinzufügen</a></h4> 
      <input type="hidden" id="kf-links-counter" value="<?php echo ((count($links['items']) < 1) ? 1 : count($links['items'])); ?>" /> 
      <input type="hidden" name="<?php echo self::kfl_key; ?>" id="<?php echo self::kfl_key; ?>" value="<?php echo $post_string; ?>" /> 
     </div> 
     <?php 
    } 

    function kf_links_item_display_html($ID, $arr, $is_active) 
    { 
     ?> 
     <div id="kf-links-item[<?php echo $ID; ?>]" class="kf-links-item"> 
      <input onChange="kfl_creaetLinksString();" value="<?php echo $arr['name']; ?>" <?php if ($is_active) echo 'required '; ?>placeholder="Name" /> 
      <input onChange="kfl_creaetLinksString();" value="<?php echo $arr['url']; ?>" <?php if ($is_active) echo 'required '; ?>placeholder="http://..." /> 
      <input onClick="kfl_deleteLink('kf-links-item[<?php echo $ID; ?>]'); kfl_creaetLinksString();" value="&cross;" type="button" class="button button-small button-primary" /> 
     </div> 
     <?php 
    } 

    function kf_links_meta_box_save($post_id) 
    { 
     if (!isset($_POST['kf_links_meta_box_nonce']) || ! wp_verify_nonce($_POST['kf_links_meta_box_nonce'], 'kf_links_meta_box')) { 
      return $post_id; 
     } 

     $post_type = get_post_type_object($_POST['post_type']); 

     if (!current_user_can($post_type->cap->edit_post, $post_id)) { 
      return; 
     } 

     $new_meta_value = (isset($_POST[self::kfl_key]) ? $_POST[self::kfl_key] : ''); 
     update_post_meta($post_id, self::kfl_key, $new_meta_value); 
    } 

    function kf_links_explode($string) 
    { 
     if (empty($string) || !is_string($string)) { 
      $links['is_active'] = 0; 
      return $links; 
     } 

     $explode = explode(';$;', $string); 

     $links['is_active'] = (isset($explode[0]) ? $explode[0] : 0); 
     $links['title'] = (isset($explode[1]) ? $explode[1] : ''); 

     $links['items'] = array(); 
     for ($i = 2; $i < count($explode); $i++) { 
      $explode2 = explode(';?;', $explode[$i]); 
      $link = array(
        'name' => $explode2[0], 
        'url' => $explode2[1] 
      ); 
      $links['items'][] = $link; 
     } 
     return $links; 
    } 
} 

И вот несколько скриншотов: https://www.dropbox.com/sh/jj3gluc7ok001hu/AABq_hRiKcbbDo1E0rKpP2Jxa?dl=0

+0

Эта строка бесполезна 'set runtimepath^= ~/.vim/bundle/ctrlp.vim'. Вы можете удалить его, так как патоген уже делает это. Что касается синтаксиса, можете ли вы привести примеры в вопросе, которые вызывают ошибки? – FDinoff

+0

Какую версию Vim вы используете, и, пожалуйста, дайте воспроизводимые примеры фрагментов (в идеале поддерживаемых снимками экрана), которые показывают проблему (проблемы). –

+0

Что сказал бы 'php -l файл.php'? – hek2mgl

ответ

0

Попробуйте :syntax sync fromstart.

Если это работает, добавьте autocmd BufEnter * :syntax sync fromstart к вашему .vimrc

Пояснение: если подсветка синтаксиса не обрабатывает каждую строку кода с самого начала, он не может получить критическую часть информации, чтобы понять, какой тип кода он обработка. Например, если вы находитесь в HTML-файле и глубоко внутри тега сценария, подсветка синтаксиса может не выглядеть достаточно далеко, чтобы увидеть тег скрипта и, следовательно, обрабатывает ваш JS-код как HTML.

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