]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge remote-tracking branch 'upstream/master'
authorcodybuell <cody@codybuell.com>
Wed, 17 Jan 2018 19:42:20 +0000 (14:42 -0500)
committercodybuell <cody@codybuell.com>
Wed, 17 Jan 2018 19:42:20 +0000 (14:42 -0500)
.travis.yml
README.md
doc/vim-markdown.txt
ftplugin/markdown.vim
syntax/markdown.vim
test/syntax.vader

index 8ea8d3d3803533df55ca9710af4e3b292ab74f20..90cc371b1ac2ce06df82e2c391393a166c6a24f3 100644 (file)
@@ -24,6 +24,9 @@ before_script: |
     export PATH="/usr/local/bin:$PATH"
     cd "$TRAVIS_BUILD_DIR"
   fi
+  if [ "$TRAVIS_OS_NAME" = "osx" ]; then
+    sudo -H easy_install pip
+  fi
   sudo -H pip install virtualenv
 
 script:
index 0d03b34a09102309425665a58b8cd62a7a680a02..ca7eef2be70a10bf9e7d5d2f55fa950fe8e62d35 100644 (file)
--- a/README.md
+++ b/README.md
@@ -174,6 +174,37 @@ This will cause the following to be highlighted using the `cs` filetype syntax.
 
 Default is `['c++=cpp', 'viml=vim', 'bash=sh', 'ini=dosini']`.
 
+### Follow named anchors
+
+This feature allows ge to follow named anchors in links of the form
+`file#anchor` or just `#anchor`, where file may omit the `.md` extension as
+usual. Two variables control its operation:
+
+```vim
+let g:vim_markdown_follow_anchor = 1
+```
+
+This tells vim-markdown whether to attempt to follow a named anchor in a link or
+not. When it is 1, and only if a link can be split in two parts by the pattern
+'#', then the first part is interpreted as the file and the second one as the
+named anchor. This also includes urls of the form `#anchor`, for which the first
+part is considered empty, meaning that the target file is the current one. After
+the file is opened, the anchor will be searched.
+
+Default is `0`.
+
+```vim
+let g:vim_markdown_anchorexpr = "'<<'.v:anchor.'>>'"
+```
+
+This expression will be evaluated substituting `v:anchor` with a quoted string
+that contains the anchor to visit. The result of the evaluation will become the
+real anchor to search in the target file. This is useful in order to convert
+anchors of the form, say, `my-section-title` to searches of the form `My Section
+Title` or `<<my-section-title>>`.
+
+Default is `''`.
+
 ### Syntax extensions
 
 The following options control which syntax extensions will be turned on. They are off by default.
index c6d579e7cc07b9354149411a4ce388d64e2593bf..109ffdc2bd2681eab43f677607050bd0b2ea5b3d 100644 (file)
@@ -15,15 +15,16 @@ Contents ~
                        |vim-markdown-text-emphasis-restriction-to-single-lines|
   7. Syntax Concealing                         |vim-markdown-syntax-concealing|
   8. Fenced code block languages     |vim-markdown-fenced-code-block-languages|
-  9. Syntax extensions                         |vim-markdown-syntax-extensions|
+  9. Follow named anchors                   |vim-markdown-follow-named-anchors|
+  10. Syntax extensions                        |vim-markdown-syntax-extensions|
    1. LaTeX math                                      |vim-markdown-latex-math|
    2. YAML Front Matter                        |vim-markdown-yaml-front-matter|
    3. TOML Front Matter                        |vim-markdown-toml-front-matter|
    4. JSON Front Matter                        |vim-markdown-json-front-matter|
-  10. Adjust new list item indent    |vim-markdown-adjust-new-list-item-indent|
-  11. Do not require .md extensions for Markdown links
+  11. Adjust new list item indent    |vim-markdown-adjust-new-list-item-indent|
+  12. Do not require .md extensions for Markdown links
                 |vim-markdown-do-not-require-.md-extensions-for-markdown-links|
-  12. Auto-write when following link
+  13. Auto-write when following link
                                   |vim-markdown-auto-write-when-following-link|
  4. Mappings                                            |vim-markdown-mappings|
  5. Commands                                            |vim-markdown-commands|
@@ -191,6 +192,35 @@ This will cause the following to be highlighted using the 'cs' filetype syntax.
 <
 Default is "['c++=cpp', 'viml=vim', 'bash=sh', 'ini=dosini']".
 
+-------------------------------------------------------------------------------
+                                            *vim-markdown-follow-named-anchors*
+Follow named anchors ~
+
+This feature allows ge to follow named anchors in links of the form
+'file#anchor' or just '#anchor', where file may omit the '.md' extension as
+usual. Two variables control its operation:
+>
+  let g:vim_markdown_follow_anchor = 1
+<
+This tells vim-markdown whether to attempt to follow a named anchor in a link
+or not. When it is 1, and only if a link can be split in two parts by the
+pattern '#', then the first part is interpreted as the file and the second one
+as the named anchor. This also includes urls of the form '#anchor', for which
+the first part is considered empty, meaning that the target file is the current
+one. After the file is opened, the anchor will be searched.
+
+Default is '0'.
+>
+  let g:vim_markdown_anchorexpr = "'<<'.v:anchor.'>>'"
+<
+This expression will be evaluated substituting 'v:anchor' with a quoted string
+that contains the anchor to visit. The result of the evaluation will become the
+real anchor to search in the target file. This is useful in order to convert
+anchors of the form, say, 'my-section-title' to searches of the form 'My
+Section Title' or '<<my-section-title>>'.
+
+Default is "''".
+
 -------------------------------------------------------------------------------
                                                *vim-markdown-syntax-extensions*
 Syntax extensions ~
index 48fa89e5dfb4b7cdcd68ae5878d3f30053761639..067643d22d551936dcd940bcb9c4592fa023d7ca 100644 (file)
@@ -578,28 +578,45 @@ endfunction
 
 " We need a definition guard because we invoke 'edit' which will reload this
 " script while this function is running. We must not replace it.
-if !exists("*s:EditUrlUnderCursor")
-  function s:EditUrlUnderCursor()
-      let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.'))
-      if l:url != ''
-          if get(g:, 'vim_markdown_autowrite', 0)
-            write
-          endif
-          if get(g:, 'vim_markdown_no_extensions_in_markdown', 0)
-              " use another file extension if preferred
-              if exists('g:vim_markdown_auto_extension_ext')
-                let l:ext = '.'.g:vim_markdown_auto_extension_ext
-              else
-                let l:ext = '.md'
-              endif
-              execute 'edit' fnameescape(fnamemodify(expand('%:~'), ':p:h').'/'.l:url.l:ext)
-          else
-              execute 'edit' fnameescape(l:url)
-          endif
-      else
-          echomsg 'The cursor is not on a link.'
-      endif
-  endfunction
+if !exists('*s:EditUrlUnderCursor')
+    function s:EditUrlUnderCursor()
+        let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.'))
+        if l:url != ''
+            if get(g:, 'vim_markdown_autowrite', 0)
+                write
+            endif
+            let l:anchor = ''
+            if get(g:, 'vim_markdown_follow_anchor', 0)
+                let l:parts = split(l:url, '#', 1)
+                if len(l:parts) == 2
+                    let [l:url, l:anchor] = parts
+                    let l:anchorexpr = get(g:, 'vim_markdown_anchorexpr', '')
+                    if l:anchorexpr != ''
+                        let l:anchor = eval(substitute(
+                            \ l:anchorexpr, 'v:anchor',
+                            \ escape('"'.l:anchor.'"', '"'), ''))
+                    endif
+                endif
+            endif
+            if l:url != ''
+                if get(g:, 'vim_markdown_no_extensions_in_markdown', 0)
+                    " use another file extension if preferred
+                    if exists('g:vim_markdown_auto_extension_ext')
+                        let l:url = '.'.g:vim_markdown_auto_extension_ext
+                    else
+                        let l:url = '.md'
+                    endif
+                endif
+                let l:url = fnamemodify(expand('%:h').'/'.l:url, ':.')
+                execute 'edit' l:url
+            endif
+            if l:anchor != ''
+                silent! execute '/'.l:anchor
+            endif
+        else
+            echomsg 'The cursor is not on a link.'
+        endif
+    endfunction
 endif
 
 function! s:VersionAwareNetrwBrowseX(url)
index 43cb8988e2265a1060856958ecc7b6db90cf62f0..008a6d83d5e27dbcd69e88bad65b57a495e37d43 100644 (file)
@@ -108,11 +108,9 @@ syn match  mkdCode         /^\s*\n\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ containe
 syn match  mkdListItem     /^\s*\%([-*+]\|\d\+\.\)\ze\s\+/ contained
 syn region mkdListItemLine start="^\s*\%([-*+]\|\d\+\.\)\s\+" end="$" oneline contains=@mkdNonListItem,mkdListItem,@Spell
 syn region mkdNonListItemBlock start="\(\%^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@!\|\n\(\_^\_$\|\s\{4,}[^ ]\|\t+[^\t]\)\@!\)" end="^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@=" contains=@mkdNonListItem,@Spell
-syn match  mkdRule         /^\s*\*\s\{0,1}\*\s\{0,1}\*$/
-syn match  mkdRule         /^\s*-\s\{0,1}-\s\{0,1}-$/
-syn match  mkdRule         /^\s*_\s\{0,1}_\s\{0,1}_$/
-syn match  mkdRule         /^\s*-\{3,}$/
-syn match  mkdRule         /^\s*\*\{3,5}$/
+syn match  mkdRule         /^\s*\*\s\{0,1}\*\s\{0,1}\*\(\*\|\s\)*$/
+syn match  mkdRule         /^\s*-\s\{0,1}-\s\{0,1}-\(-\|\s\)*$/
+syn match  mkdRule         /^\s*_\s\{0,1}_\s\{0,1}_\(_\|\s\)*$/
 
 " YAML frontmatter
 if get(g:, 'vim_markdown_frontmatter', 0)
index 05401551077f2d5a37a84f8eac242e750a3882e9..0adae58a586e5a19801e5ba868a0e7086e666456 100644 (file)
@@ -629,6 +629,14 @@ Execute (link in blockquote):
   AssertEqual SyntaxOf('a'), 'mkdLink'
   AssertEqual SyntaxOf('foo'), 'mkdInlineURL'
 
+Given markdown;
+[https://domain.tld](https://domain.com) not_a_link
+
+Execute (link with url title):
+  AssertEqual SyntaxOf('https://domain.tld'), 'mkdInlineURL'
+  AssertEqual SyntaxOf('https://domain.com'), 'mkdInlineURL'
+  AssertNotEqual SyntaxOf('not_a_link'), 'mkdInlineURL'
+
 # Code Blocks
 
 Given markdown;