Since I use Vim I have troubles with double byte characters.
I want to capture all strings of matches together with startcolumn and endcolumn of a match (line by line). I don't need only the strings but also the columnnumbers for other functions.
The last few years I used match/matchend then I noted that it did not capture correctly double byte characters within the string.
Then I adapted everything to use searchpos() but today I found out that it gives troubles with string with a double byte character at the end. 
   "mylist = list with all linenrs having matches
   for n in range(0, len(mylist)-1)
     let idx                  = []
     let edx                  = []
     let matches_between_cols = []
     "FIND ALL IDX MATCHES 
     "idx --> forward search
     call cursor(mylist[n],1)
     while line(".") == mylist[n]
       let S= searchpos(@/, '')
       if S[0] == mylist[n]
         call add(idx, S[1]-1)
       endif
     endwhile
     "idx --> backward search (to include matches on first column)
     call cursor(mylist[n],len(getline(mylist[n])))
     while line(".") == mylist[n]
       let S= searchpos(@/, 'b')
       if S[0] == mylist[n]
         call add(idx, S[1]-1)
       endif
     endwhile
     "FIND ALL EDX MATCHES
     "edx --> forward search
     call cursor(mylist[n],1)
     while line(".") == mylist[n]
       let E= searchpos(@/, 'e')
       if E[0] == mylist[n]
         call add(edx, E[1])
       endif
     endwhile
     "edx --> backward search (to include matches on first column)
     call cursor(mylist[n],len(getline(mylist[n])))
     while line(".") == mylist[n]
       let E= searchpos(@/, 'eb')
       if E[0] == mylist[n]
         call add(edx, E[1])
       endif
     endwhile
     if len(idx) > 0
       for i in range(0,len(idx)-1)
            let r = strpart(getline(mylist[n]),idx[i], edx[i]-idx[i])
            call add(matches_between_cols, r)
       endfor
     endif
   endfor
-----------------------------------
Buffer:
city | Felicità 
whatever | Peach 
pmg00000001 | Perché 
text| Céline
bMgbXuEWo | Université 
@/ = "| \zs\S\+"
it captures:
Felicit<c3>
Peach
Perch<c3>
Céline
Universit<c3>
Expected:
Felicità 
Peach 
Perché
Céline 
Université 
Can you please tell me what I did wrong?
(Is it not possible to let every character be a single byte char as in languages as Python?)
-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
--- 
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Thursday, April 21, 2016
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment