There is an asymmetry in handling indices for lists and strings.
Lists accept things like lst[n], lst[n1:n2], lst[n1:-n2], and lst[-n].
Strings accept str[n], str[n1:n2], str[n1:-n2] (all with the same
meanings as the corresponding operations for lists), but not str[-n].
Negative indices in strings always return '', which is frustrating. :)
The patch below makes negative indices behave the same way for
string as they do for lists (but they don't rise exceptions when out of
range):
:let a = '12345'
:echo a[-1]
5
:echo string(a[-6])
''
Negative indices for strings never did anything useful (at least as
far as I can tell), so this is unlikely to break existing code.
Best regards,
/lcd
diff -r 277885c9c344 src/eval.c
--- a/src/eval.c Wed Feb 12 22:08:49 2014 +0100
+++ b/src/eval.c Thu Feb 13 09:20:29 2014 +0200
@@ -5414,8 +5414,10 @@
else
{
/* The resulting variable is a string of a single
- * character. If the index is too big or negative the
+ * character. If the index is out of range the
* result is empty. */
+ if (n1 < 0)
+ n1 = len + n1;
if (n1 >= len || n1 < 0)
s = NULL;
else
--
--
You received this message from the "vim_dev" 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_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.